当前位置: 首页 > news >正文

交换排序——快速排序

        交换排序的基本思路:把序列中的两个元素进行比较,根据需求对两个元素进行交换。特点是较大的元素向序列的尾部移动,较小的元素向序列的前部移动。

        hoare法

        在序列中任取一个元素作为基准值,一趟排序完成之后,以基准值为分割点,左边的元素都小于基准值,右边的元素都大于基准值。

        一般选最左边的值作为基准值。定义左右两个指针,left和right。right找小于基准元素的值,left找大于基准值的元素。找到之后,把left和right的值交换,就是把小的元素往前换,大的元素往后换。注意,基准值在左边,一定让右边先走。如果基准值在右边,一定让左边先走。

           

         最后把keyi和相遇点的下标交换一下。以该keyi为界,左边的值都小于基准值,右边的值都大于基准值。之后对函数递归调用就好了。

        现在有两个问题:

        1、为什么基准值在左边,一定让右边先走?

      

        如果左边先走,left和right相遇时,不能保证相遇点的值比基准值小。

        2、为什么基准值在左边,一定让右边先走,最后相遇点的值一定比基准值小?

        相遇有两种情况。(1)在一次完成交换后,right找小,一直找到与left相遇。而这时left所指向的值是和原来的right交换来的,该值一定比基准值小。(2)right找到小,left找大一直找到与right相遇,该值也比基准值要小。

//交换两个值
void Swap(int* p, int* q)
{int tmp = *p;*p = *q;*q = tmp;
}
//hoare法
int PartSort1(int* a, int left, int right)
{int keyi = left;//一般选第一个为基准值while (left < right){//这里也要控制left<right,有可能序列已经有序,right会一直减到小于0,造成越界访问//right找小while (left < right && a[right] >= a[keyi]){right--;}//left找大while (left < right && a[left] <= a[keyi]){left++;}Swap(&a[left], &a[right]);//交换left和right最终指向的值}Swap(&a[keyi], &a[left]);//交换基准值和相遇点的值Swap(&keyi, &left);return keyi;
}void QuickSort(int* a, int left, int right)
{if (left >= right)//区间只有一个值或者区间不存在,直接返回{return;}int begin = left;//记录区间第一个元素的下标int end = right;//记录区间最后一个元素的下标int keyi = PartSort1(a, left, right);//一趟排序//序列被划分为三个部分//[begin,keyi-1] keyi [keyi+1,end]QuickSort(a, begin, keyi - 1);//对左区间排序QuickSort(a, keyi + 1, end);//对右区间排序
}

相关文章:

  • opencv 图像的旋转
  • mysql的函数(第一期)
  • 简单线段树的讲解(一点点的心得体会)
  • 动态规划算法:状态压缩
  • 【python编程从入门到到实践】第二章 变量和简单的数据类型
  • Nginx 文件上传大小限制及 `client_max_body_size` 最大值详解
  • Linux 系统盘制作 | 引导加载器(GRUB 为例)| mount
  • 二叉树进阶 - 二叉搜索树
  • PDF转excel+json ,vue3+SpringBoot在线演示+附带源码
  • 宇树机器狗go2—slam建图(1)点云格式
  • MLLMs for TSAD ?
  • 单例模式:懒汉式的两种优化写法
  • 编译报错 宏 _IOC_SIZEBITS,而这个宏在编译时未定义
  • Bash 中的数学运算详解
  • 【每天一个知识点】模式识别
  • 自动驾驶---决策规划之导航增强端到端
  • Jinja2模板引擎SSTI漏洞
  • 加密壳(二)将shellcode写入PE
  • STL——红黑树的封装及map/set的模拟实现
  • 数字孪生火星探测车,星际探索可视化
  • AI时代教育如何变革?上海首批 “标准化家长学校”出炉
  • 龙登高谈近世的基层治理及制度变迁
  • 玉渊谭天丨先爆视频再爆订单,美关税影响下企业因短视频火出圈
  • 观察丨微短剧盛行“拿来主义”,版权保护迫在眉睫
  • 云南昆明市副市长戴惠明已任市委常委、秘书长
  • 全国首票海关特殊监管区域外保税再制造业务落地上海