快速排序(取中位数法)
来源:互联网 发布:淘宝最好的推广方式 编辑:程序博客网 时间:2024/06/04 18:41
#include<iostream>#include<algorithm>#include<iterator>using namespace std;// 求首元素、中间元素和尾元素的中位数,将中位数与首元素交换位置inline void medianAsPivot(int arr[], const int& left, const int& right){ const int middle = left+(right-left)>>1; const int l = arr[left]; const int m = arr[middle]; const int r = arr[right]; if(l<=m&&m<=r || r<=m&&m<=l) swap(arr[left], arr[middle]); if(l<=r&&r<=m || m<=r&&r<=l) swap(arr[left], arr[right]); }// 求分区位置i,该位置左边的所有元素小于该元素,右边的所有元素不小于该元素// 同时,求得的这个位置的元素值为第n-i大元素int partition(int arr[], const int& left, const int& right){ if(left < right) { medianAsPivot(arr, left, right); int i = left; int j = right; int key = arr[i]; // 首元素作为pivot while(i < j) { while(i<j && arr[j]>=key) j--; if(i < j) arr[i++] = arr[j]; while(i<j && arr[i]<key) i++; if(i < j) arr[j--] = arr[i]; } arr[i] = key; return i; } return left;}// 快速排序递归实现void quickSort(int arr[], const int& left, const int& right){ if(left < right) { int p = partition(arr, left, right); quickSort(arr, left, p-1); quickSort(arr, p+1, right); }}int main(){ int arr[] = {6, 8, 9, 2, 1, 4, 3, 2, 4, 7, 0, 5, 6}; int size = sizeof(arr)/sizeof(int); copy(arr, arr+size, ostream_iterator<int>(cout, " ")); cout<<endl; quickSort(arr, 0, size-1); copy(arr, arr+size, ostream_iterator<int>(cout, " ")); cout<<endl; random_shuffle(arr, arr+size); copy(arr, arr+size, ostream_iterator<int>(cout, " ")); cout<<endl; quickSort(arr, 0, size-1); copy(arr, arr+size, ostream_iterator<int>(cout, " ")); cout<<endl; return 0;}
0 1
- 快速排序(取中位数法)
- [数据结构与算法]快速排序的优化实现(取中位数)
- 查找中位数(java 快速排序)
- 快速排序(基准是中位数)
- 用快速排序找中位数
- 利用中位数进行快速排序
- 快速排序----QuickSort 中位数实现
- 主元素,中位数以及快速排序问题(分治法问题)
- 快速排序及其相关应用(中位数,第几大数等等)
- 利用快速排序的子程序查找中位数
- 题目1157:中位数:快速排序思想
- 快速排序优化通过中位数优化
- HDU 1.3.8 Who's in the Middle (排序|取中位数)
- 海量数据取中位数,比较简单耗时的是用堆排序
- poj 2388 Who's in the Middle(快速排序求中位数)
- 九度OJ 1157:中位数 (中位数、排序)
- 利用随机化快速排序求带权中位数C++实现
- 中位数应用:输油管道问题--快速排序、改进、变种
- 策略模式和桥接模式的区别
- 5月19日北油所价格行情分析及操作建议
- SQL Server 存储过程的建立和使用---以发邮件为例
- 设计模式---单例模式
- 大数的加法
- 快速排序(取中位数法)
- 函数响应式编程--资料收集
- Android IA安装分区
- NUMA微架构
- Linux文件权限
- 个人学习c语言的心得与经验!
- 木瓜妮子多媒体开发教程---第二天---Android下对图像的几何操作
- 2015年5月
- Android详细的对话框AlertDialog.Builder使用方法