快速排序概念
快速排序是指通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行之前的操作,以此达到整个数据变成有序序列。
快速排序过程
实现思路:
1.找出一个基准数(一般为数组第一个),将基准数挖出形成一个小坑。
2.从后向前找比他小的数,找到后挖出此数填到前一个坑中
3.从前向后找比他大或等于的数,找到后也挖出此数填到前一个坑。
4.重复执行2,3
源代码
public static void main(String[] args) {
int arr[]={8,3,7,1,2,0,-1,40,9,11};
quicksort(arr,0,arr.length-1);
System.out.println(Arrays.toString(arr));
}
private static void quicksort(int[] arr, int start, int end) {
if(start<end){
//找出一个基准数
int index=getindex(arr,start,end);
quicksort(arr,start,index-1);
quicksort(arr,index+1,end);
}
}
private static int getindex(int[] arr, int start, int end) {
int i=start;
int j=end;
int index=arr[i];
while(i<j){
//从后向前找比他小的数,找到后挖出此数填到前一个坑中
while (i<j&&arr[j]>=index){
j--;
}
if(i<j){
arr[i]=arr[j];
i++;
}
//从前向后找比他大或等于的数,找到后也挖出此数填到前一个坑
while (i<j&&arr[i]<index){
i++;
}
if(i<j){
arr[j]=arr[i];
j--;
}
}
arr[i]=index;
return i;
}