【快速排序】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] ...
最新文章
- 子查询中的空值导致的问题。
- cass批量选目标快捷键_大神总结100个CAD快捷键+20个CAD制图技巧,值得收藏!
- 回调函数 相当于线程_Java中的回调机制,这篇给你整的明明白白的
- Pixhawk之姿态控制篇
- Hive 高级编程??深入浅出学Hive
- 『转』数据库的委托之类型分类处理
- 吞吐性能翻倍!搭载了第三代Tensor Core的A100是怎么做到的?
- mysql官网下载页面
- 在DataGrid页眉上添加全选的CheckBox控件
- ARM开发5.3.4 基础实训( 1 ) 蜂鸣器输出控制--LPC21XX
- 海康摄像机激活失败解决方法
- html如何绘制树结构图,HTML 5 Canvas 递归画树
- 【PC工具】压缩包密码破解工具,暴力破解压缩包密码,zip密码获取
- 奔驰S400商务型升级前排座椅通风系统,夏天必备功能
- 窗帘可以选择这6种效果不错的颜色 - 好佳居窗帘十大品牌
- UniApp已经接了手机数据线,但运行工具警告 “没有检查到设备“ (华为手机为例 进行解决)
- 飞行棋技巧:你以为想赢只需要运气吗?
- 使用Spring Task实现定时任务
- webservice 本地测试把localhost 改成主机ip
- 点云配准论文阅读笔记--Comparing ICP variants on real-world data sets