算法导论:c++选择算法
来源:互联网 发布:手机修改淘宝店铺名称 编辑:程序博客网 时间:2024/05/16 14:59
选择算法即给定数组A,选出第i个大的元素,区别于排序后选择这种比较慢的方法,选择算法不需要排序即可选出第i个大元素
基于随机快排选择算法
首先实现随机快排:
随机快排就是在快排的基础上主元用随机数产生。
// 随机快速排序之随机选择替代主元int random_partition(int array[], int p, int r){ int i=(rand() % (r - p + 1)) + p; //产生[p,r]之间的一个随机数i int temp = array[r]; //交换a[i]和a[r] array[r] = array[i]; array[i] = temp; return quick_partition(array, p, r); //返回划分结果}// 随机快速排序void random_quicksort(int array[], int p, int r) { if (p < r) { int q = random_partition(array, p, r); random_quicksort(array, p, q - 1); random_quicksort(array, q + 1, r); }}
调用快速排序用到的划分函数:
/*快排分割,p首端,r尾端,i控制小于,j控制大于*/int quick_partition(int array[], int p, int r){ int x = array[r]; int i = p - 1; //注意i和p的初始值 for (int j=p; j<r;j++) { if (array[j] < x) //小于则发生交换 { i++; int temp = array[i]; array[i] = array[j]; array[j] = temp; } } //交换分割点和最尾元素 int temp = array[i+1]; array[i + 1] = array[r]; array[r] = temp; return i + 1; //返回分割点}
然后按照书上写的调用随机快排实现随机选择:
//基于随机快排选出第i个大的元素int random_select(int array[], int p, int r,int i) { if (p == r) //只有一个元素 { return array[p]; } int q = random_partition(array, p, r); int k = q - p + 1; if (i < k) //在前面 { return random_select(array, p, q-1, i); } else if(i>k) //在后面 { return random_select(array, q + 1, r, i-k); } else { return array[q]; }}
测试
int main(){ int array[6] = { 4,7,1,2,0,9 }; cout << random_select(array, 0, 5,6);}
输出:9
阅读全文
0 0
- 【算法导论】选择排序
- 算法导论:c++选择算法
- 《算法导论》2、选择排序实现(C++)
- 【算法导论】 2.2选择排序
- 算法导论_选择排序
- 【算法导论】选择排序法
- 算法导论-----------选择排序 c++
- 算法导论之随机选择
- 算法导论活动选择问题
- 计算机算法(c++) 导论
- 线性选择算法(算法导论p109)
- 算法导论贪心算法之活动选择
- 算法导论--两种选择算法
- 算法导论贪心算法活动选择
- 算法导论C语言实现: 算法基础
- kmp算法实现-算法导论C语言版
- 学习算法导论-选择排序
- [算法导论读书笔记]活动选择问题
- Hashing图像检索
- vue,bug-Couldn’t find preset "es2015"
- LINUX进程和线程_通信以及退出方式
- 第一篇博客
- 【Spring Cloud】--Spring boot入门实例
- 算法导论:c++选择算法
- 在eclipse中修改非maven项目web工程名称
- Find a number HNUST OJ 1517 (位运算 判断一列数字中出现的唯一一个奇数数字)
- 百度地图显示/隐藏放大缩小按钮
- c++练习-构造学生类
- poj2528——Mayor's posters
- 在celipse上搭建ssm框架,并整合freemarker
- FFmpeg .sh文件命令解释
- onSaveInstanceState方法会在什么时候被执行