复杂度nlog(n)之快速排序
2016-07-20 21:26
375 查看
1.简单的介绍
快速排序是利用分治和递归的思想进行的排序算法,每一次都将第一个元素置于它在数组中应该的位置(前面的数字比它小,后面的数字比它大),然后就把此数的前半段和后半段重复前面的操作。核心思想就是利用了一个paration这个函数。平均时间复杂度 | 最好时间复杂度 | 最坏时间复杂度 | 空间复杂度 |
---|---|---|---|
nlog(n) | nlog(n) | n2 | log(n) |
2.核心的paration函数
/** * 快速排序的核心算法 * * @param array * @param start * @param end * @return */ public static int paration(int[] array, int start, int end) { int temp = array[start]; while (start < end) { while (array[end] >=temp && start < end) { end--; } array[start] = array[end]; while (array[start] <= temp && start < end) { start++; } array[end] = array[start]; } array[start] = temp; return start; }
我们来简单分析一下这个代码,这段代码就是找出第一个array[start]在array数组中的位置index,并且将所有小于array[start]的数交换到index前面去,将所有比array[start]大的数交换到index后面去,这就是快排的一个小分支。
3.完整的代码
/** * 快速排序 * 时间复杂度为nlog(n) * * 最好的时间复杂度为nlog(n) * 最坏的时间复杂度为n*n * * @param array */ public static void quicksort(int[] array, int start, int end) { if (start < end) { int index = paration(array, start, end); quicksort(array, start, index - 1); quicksort(array, index + 1, end); } }
利用递归不停地分割,一直到start和end相同时,就是数组被分成一个一个数的时候,这样这个数据就变成有序的了。
相关文章推荐
- 快速排序
- C#递归算法之分而治之策略
- 有关数据库SQL递归查询在不同数据库中的实现方法
- C#中的递归APS和CPS模式详解
- C#快速排序算法实例分析
- WinForm实现按名称递归查找控件的方法
- C#递归算法之快速排序
- C#递归方法实现无限级分类显示效果实例
- 使用SqlServer CTE递归查询处理树、图和层次结构
- C#递归算法之打靶算法分析
- C#中的尾递归与Continuation详解
- C 语言快速排序实例代码
- C++快速排序的分析与优化详解
- C#递归实现显示文件夹及所有文件并计算其大小的方法
- php递归创建目录的方法
- php快速排序原理与实现方法分析
- PHP递归创建多级目录
- Javascript递归打印Document层次关系实例分析
- js实现数组冒泡排序、快速排序原理
- C#递归算法寻找数组中第K大的数