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

查找与排序-快速排序

排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。用一张图概括:

快速排序通常明显比其他 Ο(nlogn) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。快速排序的基本思想是:通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,已达到整个序列有序。一趟快速排序的具体过程可描述为:

从待排序列中任意选取一个记录(通常选取第一个记录)作为基准值,然后将记录中关键字比它小的记录都安置在它的位置之前,将记录中关键字比它大的记录都安置在它的位置之后。这样,以该基准值为分界线,将待排序列分成的两个子序列。它是处理大数据最快的排序算法之一了。该算法时间复杂度为O(n log n)。

快速排序算法采用了分治的算法设计策略

算法的原理如下:

1.从数列中挑出一个元素,称为 “基准”(pivot);

2.重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作;

3.递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。


void QuickSort(int array[], int low, int high) {

int i = low;

int j = high;

if(i >= j) {

return;

}

int temp = array[low];

while(i != j) {

while(array[j] >= temp && i < j) {

j--;

}

while(array[i] <= temp && i < j) {

i++;

}

if(i < j) {

swap(array[i], array[j]);

}

}

//将基准temp放于自己的位置,(第i个位置)

swap(array[low], array[i]);

QuickSort(array, low, i - 1);

QuickSort(array, i + 1, high);

}


http://www.kler.cn/news/329638.html

相关文章:

  • 数造科技入选中国信通院《高质量数字化转型产品及服务全景图》三大板块
  • OpenCV透视变换:原理、应用与实现
  • Mysql 学习——项目实战
  • 企业级版本管理工具(1)----Git
  • WPF之UI进阶--完整了解wpf的控件和布局容器及应用
  • 栏目一:使用echarts绘制简单图形
  • HttpSession使用方法及原理
  • .c、.cpp、.cc、.cxx、.cp后缀的区别
  • YOLOv8改进,YOLOv8改进主干网络为GhostNetV3(2024年华为的轻量化架构,全网首发),助力涨点
  • C++ STL(3)list
  • 卡夫卡的理解
  • 事务原理,以及MVCC如何实现RC,RR隔离级别的
  • 告别PPT熬夜!Kimi+AIPPT一键生成PPT,效率upup!
  • Docker全家桶:从0到加载本地项目
  • docker 部署 Seatunnel 和 Seatunnel Web
  • 浏览器用户行为集群建设-数仓建模-数据计算
  • 828华为云征文|华为云Flexus云服务器X实例搭建部署H5美妆护肤分销商城、前端uniapp
  • pytorch千问模型源码分析
  • leetcode.每日一题.2516.每种字符至少取 K 个
  • 【C++】C++基础
  • 魔都千丝冥缘——软件终端架构思维———未来之窗行业应用跨平台架构
  • D21【python接口自动化学习】-python基础之内置数据类型
  • Git记录
  • C语言:排序(1)
  • 毕业设计选题:基于ssm+vue+uniapp的家庭记账本小程序
  • 在线远程考试|基于springBoot的在线远程考试系统设计与实现(附项目源码+论文+数据库)
  • 【C++】“list”的介绍和常用接口的模拟实现
  • 进程通信——内存映射
  • Java项目实战II基于Java+Spring Boot+MySQL的智能物流管理系统(文档+源码+数据库)
  • [大语言模型-论文精读] 阿里巴巴-通过多阶段对比学习实现通用文本嵌入