快速排序是通常被认为在同数量级(O(nlog 2n))的排序方法中性能最好的。
快排思想
通过一趟排序将待排序记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分小,则分别对这两部分记录进行排序,以达到整个序列有序。
平均时间度O(nlog2n) 空间复杂度O(1) 不稳定
核心代码
public class QuickSort{
public static quickSort(int[] arr,int low,int high){
int i,j,temp,t;
if(low>high){
return;
}
i=low;
j=high;
//temp就是基准位
temp=arr[low];
while(i<j){
//先看右边,一次往左递减
while(temp<=arr[j] &&i<j ){
j--;
}
while(temp>==arr[i] && i<j){//再看右边,依次往右递减
i++;
}
//如果满足条件则交换
if(i<j){
t=arr[j];
arr[j]=arr[i];
arr[i]=t;
}
}
//最后将基准位i和j相等位置的数字相等
arr[low]=arr[i];
arr[i]=temp;
//递归调用左半边数组
quickSort(arr,low,j-1);
//递归调用右半边数组
quickSort(arr,j+1,high);
}
public static void main(String[] args){
int[] arr={10,7,2,4,7,62,3,4,2,1,8,9,19};
quickSort(arr,0,arr.length-1);
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]+"\t");
}
}
}