复杂度nlog(n)之快速排序
来源:互联网 发布:unity3d控制角色移动 编辑:程序博客网 时间:2024/06/08 00:17
1.简单的介绍
快速排序是利用分治和递归的思想进行的排序算法,每一次都将第一个元素置于它在数组中应该的位置(前面的数字比它小,后面的数字比它大),然后就把此数的前半段和后半段重复前面的操作。核心思想就是利用了一个paration这个函数。
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相同时,就是数组被分成一个一个数的时候,这样这个数据就变成有序的了。
1 0
- 复杂度nlog(n)之快速排序
- 复杂度nlog(n)之堆排序
- 复杂度nlog(n)之归并排序
- 归并排序、快速排序---时间复杂度为O(nlog n)的排序方式
- 插入排序复杂度为什么不是nlog(n)
- 快速排序改进版,时间复杂度为:O(nk+nlog(n/k))
- 快速排序——非稳定排序nlog(n)
- 堆排序(O(nlog(n))
- 矩阵就地转置+O(Nlog(N))时间复杂度
- Leetcode中常用排序 之 O(n)时间复杂度排序
- 8大排序之----快速排序与时间复杂度
- 快速排序时间复杂度
- 快速排序复杂度
- 快速排序时间复杂度为O(n×log(n))的证明
- 归并排序的空间复杂度为什么是O(n)?快速排序的空间复杂度为什么是O(log2n)?
- 排序算法之 快速排序 及其时间复杂度和空间复杂度
- 排序算法之 快速排序 及其时间复杂度和空间复杂度
- 排序算法之 快速排序 及其时间复杂度和空间复杂度
- google app版本更新
- neural-networks-and-deep-learning mnist_svm.py
- 7.20:关于面向对象编程的理解
- Codeforces 682D Alyona and Strings
- Linux学习笔记--挂载命令
- 复杂度nlog(n)之快速排序
- uitableviewcontroller使用
- 二分的模板(花式二分)
- java正则表达式
- neural-networks-and-deep-learning network.py
- maven+eclipse+nexus 项目构建(一)
- 杭电 hdu 2072 单词数#include <sstream>
- Android -- Wifi的断开及关闭流程简介
- linux安装lnmp