首页
诗词
字典
板报
句子
名言
友答
励志
学校
网站地图
C++
C++
C语言
C++ Builder
VB
PB
Ruby Rails
perl python
编程
其他开发语言
VBA
VC/MFC
当前位置:
首页
>
教程频道
>
开发语言
>
C++
>
【算法导论】c++兑现的随机化的快速排序
2012-08-08
【算法导论】c++实现的随机化的快速排序随机化的快速排序:#include iostream#include set#include stri
【算法导论】c++实现的随机化的快速排序
随机化的快速排序:
#include <iostream>#include <set>#include <string>void swap(int * a,int * b);int partition(int * array_list,int left,int right);void Print();int random_partition(int * array_list,int left,int right);void random_quick_sort(int * array_list,int left,int right);const int size = 100;//int array_list [] ={2,8,7,1,3,5,6,4};int * array_list;int main(){//const int size = 10;array_list = new int [sizeof(int)*size];srand(0);for(int i=0;i<size;i++){/*随即的填充数组元素*/int ran_num=rand()% size;array_list[i] = ran_num;}random_quick_sort(array_list,0,size - 1);Print();return 0;}void random_quick_sort(int * array_list,int left,int right){if(left >= right){return ;}int index = random_partition(array_list,left,right);random_quick_sort(array_list,left,index - 1);random_quick_sort(array_list,index + 1,right);}/*随机化的快速排序对于输入的元素加入随机化的成分,使之获得较好的平均性能*/int random_partition(int * array_list,int left,int right){srand(left);int ran_num=( rand())% right;if((ran_num < left )){/*防止出现因为取模后随机数为0的情况*/ran_num = left;}/*如果,不交换排序区间内的数据,则成为普通的快速排序*/swap(&array_list[right],&array_list[ran_num]);return partition(array_list,left,right);}int partition(int * array_list,int left,int right){int index = left;int pivot = array_list[right];for(int i= left ; i< right; i++){if(array_list[i] < pivot){swap(&array_list[index],&array_list[i]);index ++;}}swap(&array_list[right],&array_list[index]);//Print();return index;}void swap(int * a,int * b){int tmp = *a;*a = *b;*b = tmp;}void Print(){for(int i=0;i< size;i++){std::cout<<array_list[i]<<"\t";}std::cout<<std::endl;}
查看更多
下一篇
本文网址:
https://www.reader8.net/jiaocheng/20120808/1779317.html
读书人精选
热点排行
为何C++ Primer(4th)中的源代码在vc中
求教怎么学习搜索引擎
为新版论坛界面散分解决思路
懂c++的朋友帮小弟我修改一上这个人事管
求分布式计算开源框架 推荐,该如何处理
关于 vector保存的string大小写转换的有
C 写的出现一个有关问题,求解
升星星了,散分解决思路
codeblocks怎么设置忽略lib
codeblocks双击后点右键崩溃,该怎么解决