首页 > 其他分享 >快速排序需要注意的问题

快速排序需要注意的问题

时间:2022-11-13 02:44:05浏览次数:51  
标签:right input int 注意 meet pivot 排序 快速 left

1   左右哨兵等于pivot的情况要接着走,不然有可能一直不动,无限循环 2   需要先走右指针再走左指针,因为pivot在最左侧,最终停留点应该比pivot小,这样交换后小的在前;      如果左侧先走,最终停留点比pivot大 3   迭代下一轮循环的时候,不要包括相遇点,因为这个点前面都比它大,后面都比它小,不能再作为基准点;       如果迭代包括了相遇点,会造成无限循环  

private void quickSort(int[] input, int left, int right) {
        //越界
        if (left >= input.length || right < 0) {
            return;
        }
        //相遇错过
        if (left >= right) {
            return;
        }
        int meet = left;
        int baseVal = input[left];
        int head = left;
        int tail = right;
        while (true) {
            //这里等于的情况需要往前走,不然有可能一直不动,无限循环
            //这里需要先走右指针再走左指针,因为pivot在最左侧,最终停留点应该比pivot小,
            //如果左侧先走,最终停留点比pivot大,这时候交换pivot和停留点就把大的放到pivot前面了
            while (input[right] >= baseVal && left<right) {
                right--;
            }
            while (input[left] <= baseVal && left<right) {
                left++;
            }

            if (left >= right) {
                meet = right;
                break;
            }
            
            swap(input, left, right);
        }
            
swap(input, head, meet); //排序前半(较小)部分 //这里跳过meet位置,因为meet位置前的都比它小 quickSort(input, head, meet - 1); //排序后半(较大)部分 //这里跳过meet位置,因为meet位置后的都比它大 quickSort(input, meet+1, tail); }

  

标签:right,input,int,注意,meet,pivot,排序,快速,left
From: https://www.cnblogs.com/yanher/p/16885307.html

相关文章

  • #yyds干货盘点# 前端歌谣的刷题之路-第一百六十四题-快速排序
     前言我是歌谣我有个兄弟巅峰的时候排名c站总榜19叫前端小歌谣曾经我花了三年的时间创作了他现在我要用五年的时间超越他今天又是接近兄弟的一天人生难免坎坷大不了......
  • 排序函数的算法(day12)
    今天尝试了三种数字的排序法。目的为1)熟悉数组的操作2)熟悉循环笔者是做嵌入式的,不想再算法上做过多探究,自身水平和专业也不允许深入太多。现在直接给出三种排序函数。1.插值......
  • 打造快速阅读方法,让读书不再成为想做又觉得麻烦的事
    《麦肯锡精英高效阅读法》赤羽雄二不再浪费时间,给读书定一个固定阅读时间这个看似很简单的方法,实际上能够解决以往,读书读了一半,时间不够,无法在继续读下去的痛点。又或者......
  • 搬家时要注意这些“尺寸”不能忽视
    家中要是有大件物品需要搬的话,在搬家前要提前测量好尺寸,防止在搬运时发现物品比走道或是电梯的宽度都要宽;我们在搬家时,要将现场进行检查一下,或是测量一下走道或电梯,楼梯的......
  • C温故补缺(九):字节对齐与排序
    字节对齐与排序字节对齐的原因与字节排序取自:VisualEther原文档下载:Gitee_packed_packet用于结构体中变量在内存中的对齐.如typedefstructtest_s{inti;......
  • 算法题不等式计数问题常见解法-归并排序
    类型1:单个边界范围f(i)<d(j)这种格式的不等式,算法题经常询问我们满足这样的数对有多少。中间的符号也可换成任何等号不等号,也同样适用怎么计算呢?本质上,使用归并排序就是下面......
  • 冒泡排序
    洛谷1116概念//当然下面是争对升序排序冒泡是每次大当往最后移动,所有只需只需n-1次,每次移动完全,后面就不需要关,所以后面就要用j-i,表示不考虑最后的for(inti=0;i<n-......
  • 经典排序算法
    经典排序算法点击查看代码1、插入排序—直接插入排序(StraightInsertionSort)2、插入排序—希尔排序(Shell`sSort)3、选择排序—简单选择排序(SimpleSelectionSort)......
  • 二叉排序树
    二叉排序树点击查看代码定义:二叉排序树或者是一棵空树,或者是具有下列性质的二叉树:(1)若左子树不空,则左子树上所有结点的值均小于或等于它的根结点的值;(2)若右子树不空,则右......
  • 数组的复制、排序,查找
    一、数组的复制int[]re=Arrays.copyOf(nums,len)一、数组的排序,不用返回值接收,默认升序Arrays.sort(nums)二、数组查找参考:https://blog.csdn.net/weixin_386267......