快速排序是一种分治算法,思想是先选择一个分区点pivot,把待排数据分成三部分,小于pivot的,等于pivot的和大于pivot的,以此为标准交换移动数据。也就是把pivot放在中间,然后再利用分区点把数据二分,重复操作,直到数据区间缩小到1.
public void quickSort(int start,int end,int[] arr){
if(start<end){
int pivot = arr[start];
int index = start;
for(int i=start+1;i<=end;i++){
// 从start+1开始,把比piov小的往前放
if(arr[i]<pivot){
int temp = arr[index];
arr[index++] = arr[i];
arr[i] = temp;
}
}
if(inedx!=start){
arr[start] = arr[index];
arr[index] = pivot;
}
quickSort(start,index-1,arr);
quickSort(index+1,end,arr);
}
}
时间复杂度
最优时间复杂度,最坏时间复杂度,平均时间复杂度均为O(nlogn),属于原地排序,不稳定