(四)快速排序

思想: 定义一个sign,大于sign的放置在左侧,小于sign放置在右侧
(如:A, B, C, D, sign,E, F, G中,ABCD小于sign,EFG大于sign) ,然后在左右两侧的子数组,使用同样的方法(递归)

public class Sort4 {
    public static void main(String[] args) {
        int[] array = {3,1,5,7,2,4,9,6,3};
        int length = array.length;
        quickSort(array, 0, length-1);
    }

    private static void quickSort(int[] array, int start, int end) {
        int sign = array[start];
        int i = start+1;
        int j = end;

        if(i>=j){
            return;
        }

        while(i<j){
            // 先从左侧找到第一个大于sign的元素 array[i]
            while(i<j && array[i]<sign){
                i++;
            }
            // 先从右侧找到第一个小于sign的元素 array[j]
            while(i<j && array[j]>sign){
                j--;
            }
            // 交换array[i] 和 array[j]
            int tmp = array[i];
            array[i] = array[j];
            array[j] = tmp;

            i++;
        }

         // 在此处,是一次循环的结束边界点,注意i,j分别落在什么位置,将sign放置的合适的位置上
        array[start] = array[j-1];
        array[j-1] = sign;

        quickSort(array,start,i-1);
        quickSort(array,j,end);
    }
}

猜你喜欢

转载自www.cnblogs.com/lixiaopengcc/p/10865311.html