快速排序
来源:互联网 发布:大数据量 数据库 编辑:程序博客网 时间:2024/06/18 15:16
今天搞了一下午的快速排序。。。对于自己这个学渣真的是没什么说的
整理一下,方便以后复习回顾。有什么错误和改进欢迎大家指出,不胜感激!!!
快速排序(Quicksort),又称划分交换排序(partition-exchange sort),快速排序采用了分治策略(分治法的基本思想:将原问题分解为若干个规模更小但结构与原问题相似的子问题。递归地解这些子问题,然后将这些子问题的解组合为原问题的解。)利用分治法可将快速排序的分为三步:1.在数据集之中,选择一个元素作为”基准”(pivot)。2.所有小于”基准”的元素,都移到”基准”的左边;所有大于”基准”的元素,都移到”基准”的右边。这个操作称为分区 (partition) 操作,分区操作结束后,基准元素所处的位置就是最终排序后它的位置。3.对”基准”左边和右边的两个子集,不断重复第一步和第二步,直到所有子集只剩下一个元素为止。
时间复杂度
最优时间复杂度 Ο(n log n)
最坏时间复杂度 Ο(n2)
平均时间复杂度 Ο(n log n)
空间复杂度 根据实现的方式不同而不同
其划分过程如图:
C语言实现代码如下:
int Partition(int *arr, int low, int high){ if (arr == NULL && low > high) { printf("input error"); } int tmp = arr[low]; while (low < high) { while (low < high && tmp <= arr[high]) { high--; } arr[low] = arr[high]; while (low <high && tmp >= arr[low]) { low++; } arr[high] = arr[low]; } arr[low] = tmp; return low;}void QuickSort(int *arr, int low, int high){ if (low == high) { return ; } int par = Partition(arr, low, high); if (low < high) { Partition(arr, low, par-1); Partition(arr, par+1, high); }}
JAVA方法:
class quick_sort { int[] arr; private void swap(int x, int y) { int temp = arr[x]; arr[x] = arr[y]; arr[y] = temp; } private void quick_sort_recursive(int start, int end) { if (start >= end) return; int mid = arr[end]; int left = start, right = end - 1; while (left < right) { while (arr[left] <= mid && left < right) left++; while (arr[right] >= mid && left < right) right--; swap(left, right); } if (arr[left] >= arr[end]) swap(left, end); else left++; quick_sort_recursive(start, left - 1); quick_sort_recursive(left + 1, end); } public void sort(int[] arrin) { arr = arrin; quick_sort_recursive(0, arr.length - 1); }}
JavaScript方法:
Array.prototype.quick_sort = function() { var len = this.length; if (len <= 1) return this.slice(0); var left = []; var right = []; var mid = [this[0]]; for (var i = 1; i < len; i++) if (this[i] < mid[0]) left.push(this[i]); else right.push(this[i]); return left.quick_sort().concat(mid.concat(right.quick_sort()));};var arr = [5, 3, 7, 4, 1, 9, 8, 6, 2];arr = arr.quick_sort();for (i = 0; i < arr.length; i++) document.body.innerHTML += arr[i] + " ";document.body.innerHTML += "<br>";
参考来源:
- 维基百科
- 常见排序算法 - 快速排序 (Quick Sort)
- JAVA实现快速排序
- 快速排序(小程序 大思想)
- 经典排序算法设计与分析
0 0
- 快速排序
- 快速排序
- 快速排序
- 快速排序!
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- Uva 11354
- 用while-do语句逆序输出一个整数
- windows10+eclipse neon+hadoop2.6.4(伪分布式)远程连接虚拟机环境搭建
- 一个想法(续二):换个角度思考如何解决IT企业招聘难的问题!
- js与android原生的互调
- 快速排序
- 数据库新技术3
- BeanFactory not initialized or already closed
- Android 中的Handler原理
- Java开发中的23种设计模式详解及代码和图解
- BZOJ 2957 分块
- MySQL用户名和密码都正确却无法登陆的问题
- android 媒体播放器之播放音乐
- android 媒体播放器之播放音乐