快速排序的时间复杂度和空间复杂度
来源:互联网 发布:大数据研究方向有哪些 编辑:程序博客网 时间:2024/06/05 15:12
最近没有写快速排序算法,就转了一下这个代码
快速排序算法在数组中选择一个称为主元(pivot)的元素,将数组分为两部分,使得 第一部分中的所有元素都小于或等于主元,而第二部分的所有元素都大于主元。对第一部分递归地应用快速排序算法,然后对第二部分递归地应用快速排序算法。
在最差情况下,划分由 n 个元素构成的数组需要进行 n 次比较和 n 次移动。因此划分所需时间为 O(n) 。最差情况下,每次主元会将数组划分为一个大的子数组和一个空数组。这个大的子数组的规模是在上次划分的子数组的规模减 1 。该算法需要 (n-1)+(n-2)+…+2+1= O(n^2) 时间。
在最佳情况下,每次主元将数组划分为规模大致相等的两部分。设 T(n) 表示使用快速排序算法对包含 n 个元素的数组排序所需的时间,因此,和归并排序的分析相似,快速排序的 T(n)= O(nlogn)。
import java.awt.List;/** * Created by shuxing on 2017/7/12. */public class QuickSort { public static int[] quickSort(int[] list) { quickSort(list, 0, list.length - 1); return list; } public static int[] quickSort(int[] list, int first, int last) { if (first < last) {//递归地对主元(pivot)前后的数组进行快排 int pivotIndex = partition(list, first, last); quickSort(list, first, pivotIndex - 1); quickSort(list, pivotIndex + 1, last); } return list; } public static int partition(int[] list, int first, int last) {//操作过程见下图 int pivot = list[first], low = first + 1, high = last; //寻找前半数组中大于主元的元素下标和后半数组中小于或等于主元的元素下标 while (high > low) { while (pivot >= list[low] && low <= high) low++; while (pivot < list[high] && low <= high) high--; //交换两个元素 if (low < high) { int tmp = list[low]; list[low] = list[high]; list[high] = tmp; } } //插入主元进适当位置 while (list[high] >= pivot && high > first) high--; if (list[high] < pivot) { list[first] = list[high]; list[high] = pivot; return high; } else { return first; } } public static void main(String[] args) { int[] list = {2,6,3,5,4,1,8,45,2}; list = quickSort(list); for (int i = 0; i < list.length; i++) { System.out.println(list[i]); } }}
看到一个更加易懂的快速排序的算法:http://blog.csdn.net/morewindows/article/details/6684558
阅读全文
0 0
- 快速排序的时间复杂度和空间复杂度
- 快速排序 及其时间复杂度和空间复杂度
- Java快速排序的实现和时间空间复杂度分析
- 排序总结-时间复杂度和空间复杂度
- 常用的排序算法的时间复杂度和空间复杂度
- 常用的排序算法的时间复杂度和空间复杂度
- 常用的排序算法的时间复杂度和空间复杂度
- 常用的排序算法的时间复杂度和空间复杂度 .
- 常用的排序算法的时间复杂度和空间复杂度
- 常用的排序算法的时间复杂度和空间复杂度
- 常用的排序算法的时间复杂度和空间复杂度
- 常用的排序算法的时间复杂度和空间复杂度
- 常用的排序算法的时间复杂度和空间复杂度
- 常用的排序算法的时间复杂度和空间复杂度
- 常用的排序算法的时间复杂度和空间复杂度
- 常用的排序算法的时间复杂度和空间复杂度
- 常用的排序算法的时间复杂度和空间复杂度
- 常用的排序算法的时间复杂度和空间复杂度
- 构造图
- Catalan数计算及应用
- spring学习day1
- 【C++】【LeetCode】62. Unique Paths
- Android 项目中ButterKnife的基本使用
- 快速排序的时间复杂度和空间复杂度
- 杭电5914-斐波那契数列思路
- 判断字符串是否没有重复字符
- 大型网站架构的技术演进
- 计蒜客 包含233的五位数
- linux网络——iptables与网关
- 台阶问题
- 解决CentOS7关闭/开启防火墙出现Unit iptables.service failed to load: No such file or directory.
- 牛客网_华为机试_034_图片整理(字符排序)