快速排序算法介绍
快速排序和归并排序都使用分治法来设计算法,区别在于归并排序把数组分为两个基本等长的子数组,分别排好序之后还要进行归并(Merge)操作,而快速排序拆分子数组的时候显得更有艺术,取一个基准元素,拆分之后基准元素左边的元素都比基准元素小,右边的元素都不小于基准元素,这样只需要分别对两个子数组排序即可,不再像归并排序一样需要归并操作。基准元素的选取对算法的效率影响很大,最好的情况是两个子数组大小基本相当。为简单起见,我们选择最后一个元素,更高级的做法可以先找一个中位数并把中位数与最后一个元素交换,之后再进行相同的操作步骤。拆分是快速排序的核心。快速排序的最坏运行时间是O(n2),但期望的运行时间是O(nlgn)。
快速排序算法Java实现
- 把数组拆分为两个子数组加上一个基准元素: 选取最后一个元素作为基准元素,index变量记录最近一个小于基准元素的元素所在的位置,初始化为start- 1,发现新的小于基准元素的元素,index加1。从第一个元素到倒数第二个元素,依次与基准元素比较,小于基准元素,index加1,交换位置index和当前位置的元素。循环结束之后index+1得到基准元素应该在的位置,交换index+1和最后一个元素。
- 分别排序[start, index], 和[index+2, end]两个子数组
如《插入排序(Insertsort)之Java实现》一样,先实现一个数组工具类。代码如下:
- publicclassArrayUtils{
- publicstaticvoidprintArray(int[]array){
- System.out.print("{");
- for(inti=0;i<array.length;i++){
- System.out.print(array[i]);
- if(i<array.length-1){
- System.out.print(",");
- }
- }
- System.out.println("}");
- }
- publicstaticvoidexchangeElements(int[]array,intindex1,intindex2){
- inttemp=array[index1];
- array[index1]=array[index2];
- array[index2]=temp;
- }
- }
快速排序的Java实现以及测试代码如下:
- publicclassQuickSort{
- publicstaticvoidmain(String[]args){
- int[]array={9,8,7,6,5,4,3,2,1,0,-1,-2,-3};
- System.out.println("Beforesort:");
- ArrayUtils.printArray(array);
- quickSort(array);
- System.out.println("Aftersort:");
- ArrayUtils.printArray(array);
- }
- publicstaticvoidquickSort(int[]array){
- subQuickSort(array,0,array.length-1);
- }
- privatestaticvoidsubQuickSort(int[]array,intstart,intend){
- if(array==null||(end-start+1)<2){
- return;
- }
- intpart=partition(array,start,end);
- if(part==start){
- subQuickSort(array,part+1,end);
- }elseif(part==end){
- subQuickSort(array,start,part-1);
- }else{
- subQuickSort(array,start,part-1);
- subQuickSort(array,part+1,end);
- }
- }
- privatestaticintpartition(int[]array,intstart,intend){
- intvalue=array[end];
- intindex=start-1;
- for(inti=start;i<end;i++){
- if(array[i]<value){
- index++;
- if(index!=i){
- ArrayUtils.exchangeElements(array,index,i);
- }
- }
- }
- if((index+1)!=end){
- ArrayUtils.exchangeElements(array,index+1,end);
- }
- returnindex+1;
- }
- }
快速排序算法介绍
快速排序和归并排序都使用分治法来设计算法,区别在于归并排序把数组分为两个基本等长的子数组,分别排好序之后还要进行归并(Merge)操作,而快速排序拆分子数组的时候显得更有艺术,取一个基准元素,拆分之后基准元素左边的元素都比基准元素小,右边的元素都不小于基准元素,这样只需要分别对两个子数组排序即可,不再像归并排序一样需要归并操作。基准元素的选取对算法的效率影响很大,最好的情况是两个子数组大小基本相当。为简单起见,我们选择最后一个元素,更高级的做法可以先找一个中位数并把中位数与最后一个元素交换,之后再进行相同的操作步骤。拆分是快速排序的核心。快速排序的最坏运行时间是O(n2),但期望的运行时间是O(nlgn)。
快速排序算法Java实现
- 把数组拆分为两个子数组加上一个基准元素: 选取最后一个元素作为基准元素,index变量记录最近一个小于基准元素的元素所在的位置,初始化为start- 1,发现新的小于基准元素的元素,index加1。从第一个元素到倒数第二个元素,依次与基准元素比较,小于基准元素,index加1,交换位置index和当前位置的元素。循环结束之后index+1得到基准元素应该在的位置,交换index+1和最后一个元素。
- 分别排序[start, index], 和[index+2, end]两个子数组
如《插入排序(Insertsort)之Java实现》一样,先实现一个数组工具类。代码如下:
- publicclassArrayUtils{
- publicstaticvoidprintArray(int[]array){
- System.out.print("{");
- for(inti=0;i<array.length;i++){
- System.out.print(array[i]);
- if(i<array.length-1){
- System.out.print(",");
- }
- }
- System.out.println("}");
- }
- publicstaticvoidexchangeElements(int[]array,intindex1,intindex2){
- inttemp=array[index1];
- array[index1]=array[index2];
- array[index2]=temp;
- }
- }
快速排序的Java实现以及测试代码如下:
- publicclassQuickSort{
- publicstaticvoidmain(String[]args){
- int[]array={9,8,7,6,5,4,3,2,1,0,-1,-2,-3};
- System.out.println("Beforesort:");
- ArrayUtils.printArray(array);
- quickSort(array);
- System.out.println("Aftersort:");
- ArrayUtils.printArray(array);
- }
- publicstaticvoidquickSort(int[]array){
- subQuickSort(array,0,array.length-1);
- }
- privatestaticvoidsubQuickSort(int[]array,intstart,intend){
- if(array==null||(end-start+1)<2){
- return;
- }
- intpart=partition(array,start,end);
- if(part==start){
- subQuickSort(array,part+1,end);
- }elseif(part==end){
- subQuickSort(array,start,part-1);
- }else{
- subQuickSort(array,start,part-1);
- subQuickSort(array,part+1,end);
- }
- }
- privatestaticintpartition(int[]array,intstart,intend){
- intvalue=array[end];
- intindex=start-1;
- for(inti=start;i<end;i++){
- if(array[i]<value){
- index++;
- if(index!=i){
- ArrayUtils.exchangeElements(array,index,i);
- }
- }
- }
- if((index+1)!=end){
- ArrayUtils.exchangeElements(array,index+1,end);
- }
- returnindex+1;
- }
- }
分享到:
相关推荐
详细解释了快速排序的java实现.里面有代码,还有注释说明
java 快速排序 折半查找的界面实现 (递归与分治法)
快速排序算法的Java实现。下载后把Package信息稍作修改即可运行。
快速排序 快速排序.java 使用java实现的代码 快速排序.java 使用java实现的代码 快速排序.java 使用java实现的代码 快速排序.java 使用java实现的代码 快速排序.java 使用java实现的代码
快速排序 java实现
快速排序 快速排序2.java 使用java来实现 快速排序2.java 使用java来实现 快速排序2.java 使用java来实现 快速排序2.java 使用java来实现 快速排序2.java 使用java来实现 快速排序2.java 使用java来实现
java中实现快速排序算法。随机产生几个数然后对其进行排序
java实现的快速排序算法
实现合并排序,插入排序,希尔排序,快速排序,冒泡排序,桶排序算法的java实现。
堆排序7.java 使用java实现的堆排序堆排序7.java 使用java实现的堆排序堆排序7.java 使用java实现的堆排序堆排序7.java 使用java实现的堆排序堆排序7.java 使用java实现的堆排序堆排序7.java 使用java实现的堆排序堆...
软件工程、快速排序法。绝顶的好东西。快速排序.Java快速排序.Java快速排序.Java
(数据结构课程设计)使用java语言实现对于快速排序的演示,其中提供了暂停功能,控制图画运行速度功能,能较好的演示快速排序。
同样经典的排序方法,同样经典的java实现,同样很适合入手算法
该程序是用JAVA语言编写的,主要实现的是对一串数据的快速排序,并统计其深度
主要介绍了Java实现拖拽列表项的排序功能,非常不错,具有参考借鉴价值,需要的朋友可以参考下
文件按照window 的排序规则-Java实现。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
堆排序12.java 使用java代码实现堆排序12.java 使用java代码实现堆排序12.java 使用java代码实现堆排序12.java 使用java代码实现堆排序12.java 使用java代码实现堆排序12.java 使用java代码实现堆排序12.java 使用...
堆排序10.java 使用java来实现堆排序10.java 使用java来实现堆排序10.java 使用java来实现堆排序10.java 使用java来实现堆排序10.java 使用java来实现堆排序10.java 使用java来实现堆排序10.java 使用java来实现堆...
快速排序是一个知名度极高的排序算法,其对于大数据的优秀排序性能和相同复杂度算法中相对简单的实现使它注定得到比其他算法更多的宠爱。这里采用简单的小例子实现快速排序。
一个简单的快速排序算法,用JAVA编写的