快速排序-左右指针法-java

左右指针法容易出现问题的地方是一趟快速排序相遇时的处理方式
如果参考在末尾,要先从左走
如果参考在数组头部,要先从右走

参考在数组头部,要先从右走

    private static int partition(int[] array, int left, int right) {
        int key = array[left];
        int index = left;
        while (left < right) {

            while (left < right && array[right] <= key) {
                --right;
            }

            while (left < right && array[left] >= key) {
                ++left;
            }

            swap(array, left, right);
        }
        swap(array, right, index);
        return right;
    }

    private static void swap(int[] cost, int i, int j) {
        int temp = cost[i];
        cost[i] = cost[j];
        cost[j] = temp;
    }

参考在末尾,要先从左走

    private static int partition2(int[] array, int left, int right) {
        int key = array[right];
        int index = right;
        while (left < right) {

            while (left < right && array[left] <= key) {
                ++left;
            }

            while (left < right && array[right] >= key) {
                --right;
            }

            swap(array, left, right);
        }
        swap(array, left, index);
        return left;
    }

参考:
https://www.jianshu.com/p/bb41e3be09ba

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 指针是C语言中广泛使用的一种数据类型。 运用指针编程是C语言最主要的风格之一。利用指针变量可以表示各种数据结构; ...
    朱森阅读 3,507评论 3 44
  • 1. 找出数组中重复的数字 题目:在一个长度为n的数组里的所有数字都在0到n-1的范围内。数组中某些数字是重复的,...
    BookThief阅读 1,829评论 0 2
  • 这是达里奥提出的实现目标的五个步骤,在这里继续上一次的回顾 “Identifying and Not Tolera...
    七年的旅行阅读 234评论 1 0
  • 挥挥手 颤颤巍巍的灵魂哽咽 车声急鸣 故乡的背影渐远 儿时爬过的脊背 渐渐佝偻 兜里塞满惊喜的糖果回忆 渗出迷人的...
    抱一阅读 689评论 0 0
  • 同上2016年应该有个崭新的面貌,崭新的视野。 开了几个写文章的地方,但都没有坚持下来,书买了一大推,看完的就一两...
    一晃一晃阅读 177评论 0 1