快速排序的基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。
算法描述
快速排序使用分治法来把一个串(名单)分为两个子串(子列表)具体算法描述如下:
- 会把数组当中的一个数当成基准数
- 一般会把数组中最左边的数当成基准数,然后丛两边进行检索。丛右边检索比基准数小的,
然后左边检索比基准数大的。如果检索到了,就停下,然后交换这两个元素,然后继续检索。
public class Quick {
public static void main(String[] args) {
int[] arr={23,56,7,8,4,33,22,56};
quickSort(arr,0,arr.length-1);
System.out.println(Arrays.toString(arr));
}
public static void quickSort(int[] arr,int left,int right) {
if(left>right) {
return;
}
//定义出基准数
int base=arr[left];
//定义出i和j
int i=left;
int j=right;
while(i!=j) {
//先执行j,从后往前找比基准数小的
while(arr[j]>base&&i<j) {
j--;
}
//执行i,从前到后找比基准数大的
while(arr[i]<=base&&i<j) {
i++;
}
//交换
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
arr[left]=arr[i];
arr[i]=base;
quickSort(arr,left,i-1);
quickSort(arr,i+1,right);
}
}
结果: