快排算法

 

快速排序是(挖坑法)是挖坑填数 + 分治来实现


// j负责找坑,i负责填坑(先找坑,再填坑,所以先让j左移,找出一个坑位)
// i一开始指向基准元素,有坑了i才会去填坑(右移),i填坑后仍指向一个小元素。
// j保证后面全是大元素,i保证前面全是小元素,j与i相遇在一个小元素(因为j先左移,所以j先到达相遇位置)。最后替换相遇位置元素和基准元素
private static void QuickSort(int[] num, int left, int right){
        // 如果left=right,即数组中只剩一个元素时,直接返回
        if (left >= right){
            return;
        }
        // 设置最左边的元素为基准值
        int key = num[left];
        // 数组中比key小的放在左边,比key大的放在右边
        int i = left;
        int j = right;
        while (i < j){
            // j向左移动,直到碰到比key小的数
            while (num[j] >= key && i<j){
                j--;
            }
            // i向右移动,直到碰到比key大的数
            while (num[i] <= key && i<j){
                i++;
            }
            // i和j指向的元素交换
            if (i < j){
                int temp = num[i];
                num[i] = num[j];
                num[j] = temp;
            }
        }
        num[left] = num[i];
        num[i] = key;
        QuickSort(num, left, i-1);
        QuickSort(num, i+1, right);
    }

 

posted @ 2020-06-17 11:14  Valentino  阅读(149)  评论(0编辑  收藏  举报