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

究极短的快排代码【QuickSort】

快排 QuickSort

两边向中间扫描法:取一个基点值,从左往右扫描,基点值左边所有元素小于它,遇到大于基点值的则停下,开始从右往左扫描,右边所有元素大于他,遇到小于基点值则停下,如果这时左右指针不交叉(左指针在基点左边,右指针在基点右边),则交换两个指针当前值,在每一次交换后两个指针均向右向左移动。依次递归则完成排序。

取中间值为基点,如果递归调用时将j换成i,那么x取值时需要向上取整,否则会造成边界问题

建议读者用不同的数组根据代码逻辑模拟 方便理解

void QuickSort(int a[] , int l , int r){
    if ( l >= r ) return ;
    int i = l - 1, j = r + 1, x = a[l + r >> 1] ; //注意x的取值与下面的函数递归调用的参数有关
    while( i < j ){
        while( a[++i] < x );
        while( a[--j] > x );
        if( i < j ) swap(a[i] , a[j]);
    }
    QuickSort(a , l , j);
    QuickSort(a , j + 1 , r);
}

void QuickSort(int a[] , int l , int r){
    if ( l >= r ) return ;
    int i = l - 1, j = r + 1, x = a[l + r + 1 >> 1] ; //注意x的取值与下面的函数递归调用的参数有关
    while( i < j ){
        while( a[++i] < x );
        while( a[--j] > x );
        if( i < j ) swap(a[i] , a[j]);
    }
    QuickSort(a , l , i - 1);
    QuickSort(a , i , r);
}

http://www.kler.cn/a/144754.html

相关文章:

  • Spring(2):Spring事务管理机制
  • BERT-pytorch源码实现,解决内存溢出问题
  • 基于 STM32 的温度测量与控制系统设计
  • AUTOSAR汽车电子嵌入式编程精讲300篇-基于机器学习的车载 CAN 网络入侵检测(续)
  • GB28181学习(十七)——基于jrtplib实现tcp被动和主动发流
  • python的requests请求参数带files
  • vue一个页面左边是el-table表格 当点击每条数据时可以在右边界面编辑表格参数,右边保存更新左边表格数据
  • 不用排队升级GPT/获取api
  • 键入网址到网页显示,期间发生了什么?
  • 【云原生 Prometheus篇】Prometheus的动态服务发现机制
  • 【数据结构实验】图(二)将邻接矩阵存储转换为邻接表存储
  • 入门指南:介绍Python库——Pandas
  • 首页以卡片形式来展示区块链列表数据(Web3项目一实战之五)
  • TOGAF —体系结构治理
  • Spring Cloud Gateway 网关跨域问题解决
  • DBeaver连接Oracle时报错:Undefined Error
  • acwing算法基础之数学知识--Nim游戏和集合Nim游戏
  • echarts的横向柱状图文字省略,鼠标移入显示内容 vue3
  • 【机器学习】聚类(一):原型聚类:K-means聚类
  • labelImg