快速排序(Quick sort)
2016-05-31 16:43
302 查看
基本思想 : 将一个将要排序的数据分割成独立的两部分,其中的一部分的所有数据都要比另外一部分的所有数据要小。之后再对这两部分分别继续递归地执行相同的方式直到排序完成。
如果快速排序处在最坏情况下的话,其时间复杂度和冒泡排序相同。O(n2)
平均的性能而言,其查找速度的时间复杂度为O(nlogn),是处在几种排序算法中效率最高的。
其采用的核心思想 : 分治法
1 将问题分解为规模更小的子问题。
2 将这些子问题逐个击破。
3 将解决掉的子问题合并最终得出问题的解。
分治法和递归经常同时应用在算法的设计中。
算法原理 :将要排序的数组中任意选取一个数据(通常是数组的第一个数),将比此数小的放到其左边,然后再将比其大的数放置其右边。然后对得出的左右两个结果再继续重复执行此算法直到全数组排序完成。
具体实现方式 1 取出对比值(一般为数组的第一个值)
2 先从数组的后边往前遍历寻找比对比值小的数,找到的话将找到的数的位置和对比值对换。
3 从数组的前边往后遍历寻找比对比值大的数,找到的话将找到的数的位置和对比值对换。
4 将数组内的值全部对比一次从而根据对比值分出两个部分。
5 之后再对分出的两个部分在进行第一步到第四步的操作。
C语言代码实现如下
如果快速排序处在最坏情况下的话,其时间复杂度和冒泡排序相同。O(n2)
平均的性能而言,其查找速度的时间复杂度为O(nlogn),是处在几种排序算法中效率最高的。
其采用的核心思想 : 分治法
1 将问题分解为规模更小的子问题。
2 将这些子问题逐个击破。
3 将解决掉的子问题合并最终得出问题的解。
分治法和递归经常同时应用在算法的设计中。
算法原理 :将要排序的数组中任意选取一个数据(通常是数组的第一个数),将比此数小的放到其左边,然后再将比其大的数放置其右边。然后对得出的左右两个结果再继续重复执行此算法直到全数组排序完成。
具体实现方式 1 取出对比值(一般为数组的第一个值)
2 先从数组的后边往前遍历寻找比对比值小的数,找到的话将找到的数的位置和对比值对换。
3 从数组的前边往后遍历寻找比对比值大的数,找到的话将找到的数的位置和对比值对换。
4 将数组内的值全部对比一次从而根据对比值分出两个部分。
5 之后再对分出的两个部分在进行第一步到第四步的操作。
C语言代码实现如下
void quickSort(int *array, int left, int right) { // 对数组的所有元素进行过一次排序后,最后其左右坐标或者相等 if (left >= right) { return; } int i = left; int j = right; int pivot = array[left]; while (i < j) { // 寻找结束的条件 找到一个大于pivot的数 // 如果左坐标等于右坐标的时候,证明对数组的所有元素进行过完了一次排序 while (i < j && pivot <= array[j]) { // 向前寻找 j--; } a[i] = a[j]; // 寻找结束的条件 找到一个小于pivot的数 // 如果左坐标等于右坐标的时候,证明对数组的所有元素进行过完了一次排序 while (i < j && pivot >= array[i]) { // 向后寻找 i++; } a[j] = a[i]; } // 当最后 i = j 的时候,证明数据的一次全元素和pivot的比较完成 // 将对比的pivot值放到最后空出来的那个位置 array[i] = pivot; quickSort(array, left, i - 1); quickSort(array, i + 1, right); } int array[6] = {1, 5, 8, 2, 10, 3}; quickSort(array, 0, 6 - 1);
相关文章推荐
- 在命令行用 sort 进行排序
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- 文件遍历排序函数
- 关于C#中排序函数的总结
- C#选择排序法实例分析
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- C#实现Datatable排序的方法
- MYSQL必知必会读书笔记第五章之排序检索数据
- 超大数据量存储常用数据库分表分库算法总结
- SQLSERVER的排序问题结果不是想要的
- Windows Powershell排序和分组管道结果
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- C#通过IComparable实现ListT.sort()排序
- C#选择法排序实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题