【快速排序】c++实现快速排序代码
快速排序的基本思想是:通过一次排序将要排序的数据分成两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后
再按此方法对这两部分数据分别进行快速排序,直到有序。
程序代码如下:
#include<iostream>
using namespace std;void print(int a[], int n)
{ for(int j= 0; j<n; j++){ cout<<a[j] <<" "; } cout<<endl;
} void quickSort(int a[], int low ,int high)
{if(low<high) //判断是否满足排序条件,递归的终止条件{int i = low, j = high; //把待排序数组元素的第一个和最后一个下标分别赋值给i,j,使用i,j进行排序;int x = a[low]; //将待排序数组的第一个元素作为哨兵,将数组划分为大于哨兵以及小于哨兵的两部分 while(i<j) {while(i<j && a[j] >= x) j--; //从最右侧元素开始,如果比哨兵大,那么它的位置就正确,然后判断前一个元素,直到不满足条件if(i<j) a[i++] = a[j]; //把不满足位次条件的那个元素值赋值给第一个元素,(也即是哨兵元素,此时哨兵已经保存在x中,不会丢失)并把i的加1while(i<j && a[i] <= x) i++; //换成左侧下标为i的元素开始与哨兵比较大小,比其小,那么它所处的位置就正确,然后判断后一个,直到不满足条件if(i<j) a[j--] = a[i]; //把不满足位次条件的那个元素值赋值给下标为j的元素,(下标为j的元素已经保存到前面,不会丢失)并把j的加1} a[i] = x; //完成一次排序,把哨兵赋值到下标为i的位置,即前面的都比它小,后面的都比它大quickSort(a, low ,i-1); //递归进行哨兵前后两部分元素排序 , low,high的值不发生变化,i处于中间quickSort(a, i+1 ,high);}
}int main()
{ int a[10] = {8,1,9,7,2,4,5,6,10,3}; cout<<"初始序列:"; print(a,10); quickSort(a,0,9); cout<<"排序结果:"; print(a,10); system("pause");
}
时间复杂度:
最坏情况下的时间复杂度:![](https://private.codecogs.com/gif.latex?%5Clarge%20O%28n%5E2%29)
平均情况的时间复杂度:![](https://private.codecogs.com/gif.latex?%5Clarge%20O%28nlog_2n%29)
最好的时间复杂度:![](https://private.codecogs.com/gif.latex?%5Clarge%20O%28nlog_2n%29)
空间复杂度: ![](https://private.codecogs.com/gif.latex?%5Clarge%20O%28log_2n%29%20-%20O%28n%29)
稳定性:不稳定
【快速排序】c++实现快速排序代码相关推荐
- python快速排序解析_快速排序python实现总结
算法 数据结构 快速排序python实现总结 背景:数据结构与算法是IT相关的工程师一直以来的基础考察重点,很多经典书籍都是用c++或者java来实现,出于对python编码效率的喜爱,于是取sear ...
- c语言双向链表 快速排序,双向链表的快速排序(swift版本)
面试经常会被问到的单向链表的快速排序or双向链表的快速排序,现在用swift写了一个双向链表的快速排序,直接上代码 获取源码 //初始化 var linkList = LinkList() linkL ...
- 这是一个php中快速排序字母,php 快速排序
快速排序是以其中一个数为比较标准,其他比较的数分块处理,应用递归按相同想法处理数据 比如:4 3 6 2 1 7 8 以4为比较对象 排序为 3 2 1 6 7 8 左边为 3 2 1 右边 为 6 ...
- 快速排序法(思想及代码实现)
快速排序思想: 快速排序是对冒泡排序的一种改进,基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对着两部分数据分别进行快速排 ...
- 快速排序c语言实现,快速排序的C语言代码实现
快速排序实质上是对"冒泡排序"的一种改进,整个排序过程可概括为:通过N趟的排序将原本的排序数据分为若干块进行分块排序,而在每趟排序过程中,以指定的关键字将待排数据分别分为比关键字大 ...
- 快速排序【记录一下代码】
本文仅用作学习记录,大神勿喷O(∩_∩)O~ 代码一.百度百科C++语言版本代码,参考数据结构p274(清华大学出版社,严蔚敏) 1 void Qsort1(int a[], int low, int ...
- 快速排序算法(图解+代码)
快速排序 快速排序是基于交换类的排序.快速排序是当前公认的执行效率最高的排序算法,它的基本思想就是分治思想,使用递归来实现. 下面我们来演示一下快排的大致排序过程. 首先我们给定一个无序数组,将无序数 ...
- java快速排序(含快速排序代码)
目录 一:快速排序思想 二:快速排序代码(pivot一定时先和arrays[r]先比较) 三:结果 一:快速排序思想 假设我们现在对"6 1 2 7 9 3 4 5 10 8"这个 ...
- 快速排序算法讲解及代码(详细)
快速排序算法 一.序言 二.快速排序基本思想 三.具体步骤 四.具体代码 一.序言 快速排序是一种高效且使用广泛的排序算法,在很多语言的标准库中自带的排序都是快速排序.所以我们也有必要了解快排的原理以 ...
- 用Python实现快速排序和冒泡排序,代码+详细解析
1.冒泡排序 冒泡排序:每一次相邻的两个数做比较,大的往后移动一位,每次循环都会把最大的值(升序)或最小的值(降序)放在末端 . # a = [7, 8, 5, 45, 91, 1, -10, 0] ...
最新文章
- rediscluster全局数据_设计数据密集型应用(6-7):分片、事务
- XamarinAndroid组件教程设置自定义子元素动画(一)
- 封装构造函数,用canvas写饼状图和柱状图
- python用字典编写购物程序_Python编写购物小程序
- android 1396x750设计图,移动端的适配|切图|标注
- 对比四大企业级linux版本_Linux家族族谱
- SQL Server里面如何检查没有释放的游标
- NVIDIA控制面板打不开
- visio UML图 视频学习
- CefSharp如何获取请求响应头Headers中的数据
- 网络摄像头RTSP流媒体协议视频平台EasyNVR如何进行延迟测试?
- [usOJ5529]小奇探险
- Fifo中Underflow信号的含义
- xilinxFPGA-VGA时序+代码实现详解
- 最新 RibbonCreator 2021 OFFICE功能区编辑器
- net的曲线救国,学习路径 MVVM (一)
- 【极客赠书】向Richard Stallman提问,赢取传记《若为自由故》【活动结束】
- 同步任务和异步任务(微任务和宏任务)
- MySQL连接报ERROR 2003(HY000) Can‘t connect to MySQL server on ‘xxxIP‘(113)
- 对timedelta64的理解