快速排序

95 阅读1分钟

快速排序是一种分治算法,思想是先选择一个分区点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),属于原地排序,不稳定