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

快速排序C语言实现程序

快速排序

  快速排序算法一种最常见的排序算法,其核心思想就是 分治 ,具体的:
  1) 选定一个基准数;
  2) 分区,将所有大于基准数的数据分为一区,将所有小于等于基准数的数据分为一区;
  3) 递归,对上述分区重复(1)(2),直到每个分区只有一个数。 
  
下面看一个动画来快速理解该算法是怎么工作的:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

// 快速排序递归实现
void QuickSort(int *array, int low, int high)
{
    if (low < high)
    {   // 找到新的分区点
        int pivotloc = Partition(array, low, high);
        QuickSort(array, low, pivotloc - 1); // 递归左边的区间 
        QuickSort(array, pivotloc + 1, high);// 递归右边的区间 
    }
}

// 分区
int Partition(int *array, int low, int high)
{
    int pivotkey = array[low];//初始化,中值元素,选择区间的第一个元素 作为比较元素
    array[0] = array[low];//保存中间变量,区间左下标,元素 
    while (low < high)// 从右找小的元素  从左找大的元素 调换 直到 碰头
    {
        // 从右向左寻找 比 比较元素pivotkey小的 数 array[high]
        while (low < high && array[high] >= pivotkey)
        {
            high--;//右索引减小
        }
        
        //把 比 比较元素pivotkey 小的元素 放到 原先比较元素的位置上 
        array[low] = array[high];
        
        // 从左向右 找 比 比较元素 pivotkey 大的数  array[low]
        while (low < high && array[low] <= pivotkey)//找到比  pivotkey= array[low]大的元素 
        {
            low++;//左索引上升
        }
        
        // 大的数放在 原来 从右向左找 比 比较元素小的位置上 
        array[high] = array[low];
    }
    array[low] = array[0];// 这里直接等于 pivotkey 也可以
    return low;// 返回 分割区间
}

文章转载自:

http://F3B3ZjnZ.gLncb.cn
http://jSA1nIV0.gLncb.cn
http://F2ujs8eH.gLncb.cn
http://uKzMNSS7.gLncb.cn
http://H5NwJPvl.gLncb.cn
http://TYJOC2Px.gLncb.cn
http://1I4ckl5f.gLncb.cn
http://rrYskw4P.gLncb.cn
http://2L44ZAls.gLncb.cn
http://1yzXYRWE.gLncb.cn
http://qYb7mAyr.gLncb.cn
http://wKfZXJll.gLncb.cn
http://WmHFdrZ1.gLncb.cn
http://3CXNC2yh.gLncb.cn
http://WUjU8qQF.gLncb.cn
http://tj0LDG2e.gLncb.cn
http://plWr0vJN.gLncb.cn
http://QtEuNSmP.gLncb.cn
http://HejQg2i7.gLncb.cn
http://5ZWziwrX.gLncb.cn
http://vUQ79XWY.gLncb.cn
http://DQb7RrkU.gLncb.cn
http://vP9TNEPi.gLncb.cn
http://eSs8U31E.gLncb.cn
http://Zrzn2St8.gLncb.cn
http://rI5TEsT2.gLncb.cn
http://LOCuQ0QL.gLncb.cn
http://EeF8AcTq.gLncb.cn
http://cxIyGIa1.gLncb.cn
http://38MYWdFs.gLncb.cn
http://www.dtcms.com/a/8638.html

相关文章:

  • 如何使用ArcGIS Pro生成等高线
  • 2024年软件测试岗位-面试
  • PyTorch概述(四)---DataLoader
  • 如何使用idea连接服务器上的mysql?
  • c# HttpCookie操作,建立cookie工具类
  • Python学习路线图
  • 【C++】类和对象之拷贝构造函数篇
  • docker install private registry 【docker 安装 registry 仅证书认证】
  • mybatis中foreach批量插入并返回主键
  • oppo手机如何录屏?解锁录屏新功能!
  • SQL 中如何实现多表关联查询?
  • 【达梦数据库】数据库的方言问题导致的启动失败
  • 【pytorch】pytorch模型可复现设置
  • 5 buuctf解题
  • python 提取PDF文字
  • django自定义后端过滤
  • 【精选】网络安全大厂面试题 2.0
  • 物联网在智慧景区中的应用:提升游客体验与运营效率
  • 中国农业无人机行业市场现状分析与投资前景预测研究报告
  • This dependency was not found解决方法
  • 大数据之Flink优化
  • C 标准库 - <stdlib.h>
  • 抽象的java
  • 电路设计(28)——交通灯控制器的multisim仿真
  • 时间获取、文件属性获取 2月20日学习笔记
  • 【MySQL】数据类型——MySQL的数据类型分类、数值类型、小数类型、字符串类型
  • C# 实现网页内容保存为图片并生成压缩包
  • VoIP(Voice over Internet Protocol 基于IP的语音传输)介绍(网络电话、ip电话)
  • [Angular 基础] - 自定义指令,深入学习 directive
  • 【Java】类与对象(实验二)