快速排序四对冒泡排序一种改进。基本思想是:通过一趟排序将要排序 的数据分割成独立的两部分,其中一部分的所有数据都比另一部分的所有数据要小,然后再按照此方法对这两部分数据进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列
代码:
package com.gcy.sort;
import java.util.Arrays;
/**
* 快速排序
* @author Administrator
*
*/
public class QuickSort {
public static void main(String[] args) {
int [] arr= {-9,78,0,23,-567,70};
quickSort(arr, 0,arr.length-1);
System.out.println(Arrays.toString(arr));
}
public static void quickSort(int [] arr,int left,int right) {
int l=left;//左下标
int r=right;//右下标
int povit=arr[(left+right)/2];//中轴值
int temp=0;
//while循环目的是让比povit小的值再左边,比povit大的值在右边
while(l<r) {
//在povit的左边一直找,直到找到比povit大的值就退出
while(arr[l]<povit) {
l+=1;
}
while(arr[r]>povit) {
r-=1;
}
//如果l>=r说明povit左右两边的值, 已经按照左边全部是小于等于povit值的数,右边全是大于等于povit值的数
if(l>=r) {
break;
}
//交换
temp=arr[l];
arr[l]=arr[r];
arr[r]=temp;
//如果交换完毕后发现arr[l]==povit,r--
if(arr[l]==povit) {
r-=1;
}
//如果交换完毕后发现arr[r]==povit,l++
if(arr[r]==povit) {
l+=1;
}
}
//如果l==r,必须l++;r--,否则会出现栈溢出
if(l==r) {
l+=1;
r-=1;
}
//向左递归
if(left<r) {
quickSort(arr, left, r);
}
//向右递归
if(right>l) {
quickSort(arr, l,right);
}
}
}
结果:
有兴趣的小伙伴可以测试一下其排序速度,在数据足够多的情况下快速排序的速度是要快于插入排序的