探讨一下快速排序:
快速排序(Quicksort)是对冒泡排序的一种改进。由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
快速排序动态图:
使用快速排序法对一列数字进行排序的过程 |
分类
排序算法 |
数据结构
Varies |
最差时间复杂度
Θ(n2) |
最优时间复杂度
Θ(nlogn) |
平均时间复杂度
Θ(nlogn) comparisons |
最差空间复杂度
根据实现的方式不同而不同 |
最佳算法
有时是 |
首先构造了基本的数据结果如下,这两个算作工具吧,一个是用于标记尚未排序区间的Pointer,另一个是基本栈结构。
/* 栈元素,用于记录尚未排序的区间*/
class Pointer
{
int start,end;
public Pointer(int x,int y)
{
this.start = x;
this.end = y;
}
}
/* 栈,用于存放Pointer的静态数组,不可动态自增维度*/
class Stack
{
private final static int MAX =20;
private static Pointer [] container;
static int place = -1;
public Stack()
{
container = new Pointer[MAX];
}
public void Push(Pointer element)
{
if(place>=-1 && place<MAX-1)
container[++place] = element;
}
public boolean isEmpty()
{
if(place ==-1)
return true;
else
return false;
}
public Pointer Pop()
{
if(place == -1 || place>=20)
return null;
else
{
return container[place --];
}
}
}
算法如下:
public class QuickSort
{
public static void main(String [] arg)
{
int [] src ={83 ,19 ,3 ,62 ,27 ,56 ,9 ,24 ,60 ,88 };
//BubbleSort.createRandom(10, 0, 100);
stack = new Stack();
stack.Push(new Pointer(0,src.length -1));
while(!stack.isEmpty())
{//递归开始
Pointer p = (Pointer)stack.Pop();
int index = sortOnce(src,p.start,p.end);
if(index - p.start >=1)
stack.Push(new Pointer(p.start,index-1));
if(p.end - index-1 >=1)
stack.Push(new Pointer(index+1,p.end));
}
System.out.println("\nend:");
for(int elements : src)
{
System.out.print(elements+" ");
}
System.out.println("");
}
static Stack stack ;
public static int sortOnce(int [] quene, int start , int end)
{
//当quene是整个的时候,start = 0 , end = quene.length -1
int pivot;//基准
pivot = quene[start];
int i = start,j=end;
while(i<j)
{
while(quene[j] > pivot && i<j)
j--;
if(i<j)
quene[i++] = quene[j];
while(quene[i] < pivot && i<j)
i++;
if(i<j)
quene[j--] = quene[i];
}
quene[i] = pivot;
for( int element:quene)
{
System.out.print(element+ " ");
}
System.out.println(" index="+i);
return i;
}
}
结果:
60 19 3 62 27 56 9 24 83 88 index=8
24 19 3 9 27 56 60 62 83 88 index=6
9 19 3 24 27 56 60 62 83 88 index=3
9 19 3 24 27 56 60 62 83 88 index=4
3 9 19 24 27 56 60 62 83 88 index=1
3 9 19 24 27 56 60 62 83 88 index=0
end:
3 9 19 24 27 56 60 62 83 88
分享到:
相关推荐
在Java中实现快速排序,我们需要定义一个方法来执行这个过程。下面是一个简化的快速排序算法的Java实现: ```java public class QuickSort { public static void quickSort(int[] arr, int low, int high) { if ...
基于JAVA的快速排序 快速排序是计算机科学中的一种重要算法,能够高效地对数据进行排序。本文将详细介绍基于JAVA的快速排序算法,包括其基本思想、实现方法和优点。 1. 快速排序的基本思想 快速排序是C.R A ....
在Java中,我们可以使用递归实现快速排序。以下是对标题和描述中所述知识点的详细说明: 1. **分治法**: 分治法是解决问题的一种策略,它将一个大问题分解为若干个规模较小、相互独立、与原问题形式相同的子问题...
根据给定的文件信息,我们将深入探讨两种经典的排序算法——快速排序和归并排序,并结合Java语言实现进行详细解析。 ### 快速排序算法 快速排序是一种高效的排序算法,采用分而治之的策略,其核心思想是选择一个...
本实验包涵盖了五种重要的算法,包括Java实现的快速排序、归并排序,以及分治算法、回溯算法和N皇后问题的C语言解决方案。下面将对这些算法进行详细介绍。 1. **快速排序**:快速排序是一种高效的排序算法,由C.A.R...
快速排序是一种高效的排序算法,由英国计算机科学家C.A.R. Hoare在1960年提出。它的主要思想是分治策略,通过选取一个基准值,将待排序的数据分为两个子序列,一个包含所有小于基准值的元素,另一个包含所有大于基准...
在这里,我们将深入探讨Java实现的八大排序算法,包括冒泡排序、选择排序、插入排序、希尔排序、快速排序、归并排序、堆排序以及计数排序。 1. **冒泡排序(Bubble Sort)**:冒泡排序是一种简单直观的排序算法,...
单线程快速排序在运行时,与选择的划分基准紧密相关,如果能够将原序列平均分为两个子序列,那么递归的次数会显著减少,从而提升排序效率。单线程快速排序的伪代码展示了排序的基本逻辑:当序列范围大于一个临界值时...
在压缩包中的“新建文件夹 (2)”可能包含了相关的源代码文件,这些文件可能包含了快速排序的C、C++、Java或Python等语言的实现。通过对这些代码的学习和实践,你可以加深对快速排序算法的理解,并提高编程技能。
快速排序法(二) 快速排序法(三) 合併排序法 基數排序法 搜尋 循序搜尋法(使用衛兵) 二分搜尋法(搜尋原則的代表) 插補搜尋法 費氏搜尋法 矩陣 稀疏矩陣 多維矩陣轉一維矩陣 上三角、下三角、...
**Java实现快速排序的代码分析:** 在给定的Java代码示例中,主要包含以下几个关键方法: 1. **`quickSort` 方法**:这是快速排序的核心递归函数。它接收一个数组 `arr`、一个低索引 `low` 和一个高索引 `high` ...
快速排序是一种高效的排序算法,由英国计算机科学家C.A.R. Hoare在1960年提出。它的基本思想是分治法(Divide and Conquer):将一个大问题分解成若干个小问题来解决,最终合并小问题的结果得到原问题的答案。在快速...
快速排序是一种高效的排序算法,采用分治策略来把一个序列分为较小和较大的两个子序列,然后递归地排序两个子序列。具体步骤如下: 1. 选择一个基准值。 2. 将所有比基准值小的元素放到基准前面,所有比基准值大的...
在Java中,快速排序的实现往往涉及到交换元素和递归调用。 4. **比赛日程安排**:虽然这个主题通常不直接与传统的分治法关联,但我们可以将其视为一个优化问题,利用类似贪心算法或动态规划的方法来解决。例如,...
3. 对每个非空箱子内的元素进行排序,可以使用其他排序算法,如插入排序、快速排序等。 4. 顺序遍历所有的箱子,将每个箱子中的元素依次添加回原数组,这样就得到了有序的序列。 这个项目对于学习数据结构的学生来...
在本课程设计中,我们将使用 Java 语言对快速排序算法进行实现,并对算法的性能进行分析和比较。 快速排序算法的优点包括: * 高效的排序速度:快速排序算法的时间复杂度为 O(n log n),它是一种高效的排序算法,...
- 首先,我们可以将二维数组的元素转换成一维数组,然后使用标准的排序算法(如快速排序、归并排序)对一维数组进行排序。 - 排序完成后,根据原二维数组的行数和列数,再将一维数组重新构造回二维数组,此时元素...
本文将为大家介绍最简单易懂的Java数组排序方法,总结了四种常见的排序方法:快速排序法、冒泡排序法、选择排序法和插入排序法。 快速排序法 快速排序法是Java中最简单和最常用的排序方法之一。它使用了Java的...
1. **快速排序**:快速排序是一种高效的排序算法,它基于“分而治之”的策略。在Java中,递归用于将大数组分为较小的部分,然后对这些部分进行排序。关键在于选择一个“基准”元素,将数组分为小于和大于基准的两...