快速排序

快速排序

public class QuickSort {
    public static void quickSort(int[] list){
        quickSort(list, 0, list.length-1);
    }
    private static void quickSort(int[] list, int first, int last) {
        if (last>first){
            int pivotIndex= partition(list,first,last);
            quickSort(list,first,pivotIndex-1);
            quickSort(list,pivotIndex+1,last);
        }
    }
    private static int partition(int[] list, int first, int last){
        int pivot = list[first];
        int low= first+1;
        int high= last;
        while (low<high){
            //寻找第一个大于pivot的
            while (low<=high&&list[low]<=pivot ){
                low++;
            }
            //寻找第一个小于或等于pivot的
            while (low<=high&&list[high]>pivot){
                high--;
            }
            //swap,并且是在high>low条件下
            if (high>low){
                int temp=list[high];
                list[high]=list[low];
                list[low]=temp;
            }
        }
        while (high>first && list[high]>=pivot){
            high--;
        }
        if (pivot>list[high]){
            list[first]=list[high];
            list[high]=pivot;
            //return pivot 的最终位置
            return high;
        }
        else {
            return first;
        }
    }

    public static void main(String[] args) {
        int[] list={2,3,1,1,-1,4,5,0};
        quickSort(list);
        for (int i = 0; i < list.length; i++) {
            System.out.println(list[i]);
        }
    }
}
posted on 2021-04-15 16:25  LuckyJane  阅读(37)  评论(0)    收藏  举报