您好,登录后才能下订单哦!
密码登录
            
            
            
            
        登录注册
            
            
            
        点击 登录注册 即表示同意《亿速云用户服务条款》
        快排的逻辑其实很简单,
代码如下:
public static void quickSort(int[] array) {
        //待排序区间为[0, array.length - 1]
        quickSortIternal(array, 0, array.length - 1);
}
private static void quickSortIternal(int[] array, int left, int right) {
        if(left >= right)
                return;
        //这里的就选择最左边的元素作为基准值来操作
        //index表示基准值停留的下标
        int index = partition(array, left, right);
        quickSortIternal(array, left, index - 1);
        quickSortIternal(array, index + 1, right);
}代码如下:
public static void quickSort2(int[] array) {
            Stack<Integer> stack = new Stack<>();
            stack.push(array.length - 1);
            stack.push(0);
            while(!stack.isEmpty()) {
                    int left = stack.pop();
                    int right = stack.pop();
                    if(left >= right) {
                            continue;
                    }
                    int index = partition(array, left, right);
                    stack.push(right);
                    stack.push(index + 1);
                    stack.push(index - 1);
                    stack.push(left);
            }
    }重点是partition的实现
代码如下:
public int partition(int[] array, int left, int right) {
            int pivot = array[left];
            int l = left;
            int r = right;
            while(l < r) {
                    while(l < r && array[r] >= pivot) {
                            r--;
                    }
                    while(l < r && array[l] <= pivot) {
                            l++;
                    }
                    swap(array, l, r);
            }
            swap(array, left, l);
            return l;
    }
    private static void swap(int[] array, int i, int j) {
            int tmp = array[i];
            array[i] = array[j];
            array[j] = tmp;
    }代码如下:
public int partition(int[] array, int left, int right) {
    int pivot = array[left];
    int l = left;
    int r = right;
    while(l < r) {
            while(l < r && array[r] >= pivot) {
                    r--;
            }
            array[l] = array[r];
            while(l < r && array[l] <= pivot) {
                    l++;
            }
            array[r] = array[l];
    }
    array[l] = pivot;
    return l;
}代码如下:
private int partition(int[] array, int left, int right) {
            int pivot = array[left];
            int slow = left + 1;
            int fast = left + 1;
            while(fast <= right) {
                    if(array[fast] < pivot) {
                            swap(array, slow, fast);
                            slow++;
                    }
                    fast++;
            }
            swap(array, left, slow - 1);
            return slow - 1;
    }
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。