快速排序算法

35 阅读1分钟

快速排序

//快速排序

public static void quickSort(int[] arr,int start,int end) {

    if(start<end) {

        int point=partition(arr,start,end);

        quickSort(arr, start, point-1);

        quickSort(arr, point+1, end);

    }

}

// 定义两个指针控制比较的值

// 第一次将比基准值小的放左边,大的放右边,最后将基准值与最后左右指针重叠的元素交换

// 递归便利左边,递归便利右边

private static int partition(int[] arr, int start, int end) {

    int pi=arr[start];

    int left=start;

    int right=end;

    while(left<right) {

        while(left<right&&arr[right]>=pi)right--;

        while(left<right&&arr[left]<=pi)left++;

        if(left>=right)break;

        arr[left]=arr[left]+arr[right]-(arr[right]=arr[left]);

    }

    arr[start]=arr[left];

    arr[left]=pi;

    return left;

}