排序算法——快速排序
2016-03-15 21:57
274 查看
原理
采用分治的思想。主要分为三步:第一步,选择一个基数。
第二步,将排序数组在分区的过程,将比该基数小的放在左边,比该基数大的放在右边。第三步,对左右分区执行同样的操作直到剩下一个数字。分析
在最坏的情况下,也就是数据的划分不平衡,一部分是n-1个数字,另一部分没有数据,并且每次划分都是这种情况,则其时间复杂度就是O(n2);在一般情况(包括最好),其时间复杂度为O(nlog2n);由于以下实现过程在原数组的基础上对数组进行排序,故其空间复杂度是O(1)。C语言实现
采用分治的思想。主要分为三步:第一步,选择一个基数。
第二步,将排序数组在分区的过程,将比该基数小的放在左边,比该基数大的放在右边。第三步,对左右分区执行同样的操作直到剩下一个数字。分析
在最坏的情况下,也就是数据的划分不平衡,一部分是n-1个数字,另一部分没有数据,并且每次划分都是这种情况,则其时间复杂度就是O(n2);在一般情况(包括最好),其时间复杂度为O(nlog2n);由于以下实现过程在原数组的基础上对数组进行排序,故其空间复杂度是O(1)。C语言实现
void qsort(int *arr, int start, int end) { int high = end, low = start; int value = arr[start]; if(NULL != arr || start < end){ while(low < high){ while(low < high && arr[high] > value){ high--; } if(low < high){ arr[low] = arr[high]; low++; } while(low < high && arr[low] < value){ low++; } if(low < high){ arr[high] = arr[low]; high--; } } arr[low] = value; qsort(arr, start, low - 1); qsort(arr, low + 1, end); } }
相关文章推荐
- JavaScript演示排序算法
- 快速排序
- C#快速排序算法实例分析
- 算法之排序算法的算法思想和使用场景总结
- C++快速排序的分析与优化详解
- PHP版本常用的排序算法汇总
- JavaScript实现多种排序算法
- js实现数组冒泡排序、快速排序原理
- php简单实现快速排序的方法
- Java 快速排序(QuickSort)原理及实现代码
- 快速排序和分治排序介绍
- java 算法之快速排序实现代码
- php 地区分类排序算法
- js三种排序算法分享
- Javascript中的常见排序算法
- java 合并排序算法、冒泡排序算法、选择排序算法、插入排序算法、快速排序算法的描述
- Java实现快速排序算法(Quicktsort)
- Java中的数组排序方式(快速排序、冒泡排序、选择排序)
- 快速排序的原理及java代码实现
- C/C++实现快速排序的方法