博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
随机快速排序
阅读量:6267 次
发布时间:2019-06-22

本文共 1591 字,大约阅读时间需要 5 分钟。

#include<iostream>

#include <vector>
#include <cstdlib>
#include<ctime>
using namespace std;
/*
作用:返回一个在(min,max)之间的一个随机整数
参数:min--返回值的最小限制
max--返回值的最大限制
*/
int random(int min,int max)
{
srand((unsigned)time(NULL));//设置随机数的来源
return rand()%(max-min+1)+min;
}

/*

作用:将数组r位置的数据移动到相应的位置,
使得其左边的元素都小于数组r,右边的元素都大于r;
参数:A--需要操作的数组
P--操作数组的起始位置(不一定是数组的首个元素)
R--操作数组的终止位置(不一定是数组的终止元素)
返回值:原数组R的最后位置
说明:由于使用的容器,为值传递,需要传递地址
*/

int Partition(vector<int> &A, int p, int r)

{
int x = A[r];
int i = p - 1;
int flag;
for (int j = p; j <= (r - 1); j++)
{
if (A[j]<=x)
{
i = i + 1; //记录最后元素需要移动的位置
flag = A[i]; //将A[i]与A[j]进行交换
A[i] = A[j];
A[j] = flag;
}
}
flag = A[i+1]; //将数组R插入到相应的的地方
A[i+1] = A[r];
A[r] = flag;
return (i + 1);
}
void QuitSort(vector<int> &A, int p, int r)
{
int q;
if (p < r)
{
q = Partition(A, p , r);
QuitSort(A, p, q - 1);
QuitSort(A, q + 1, r);

}

}
/*
为了弥补快速排序的分配不均,对最后一个数据进行随机抽选
*/
int RandomPartition(vector<int> &A, int p, int r)
{
int i = random(p, r);
int flag = 0;
flag = A[i];
A[i] = A[r];
A[r] = flag;
return Partition(A, p, r);
}
void RandomQuitSort(vector<int> &A, int p, int r)
{
int q;
if (p < r)
{
q = RandomPartition(A, p, r);
RandomQuitSort(A, p, q - 1);
RandomQuitSort(A, q + 1, r);

}

}

int main()

{
vector<int> A({2,8,7,1,3,5,6,4});
vector<int>::iterator i = A.begin ();
int j = 0;
int q = 0;
QuitSort(A, 0, A.size() - 1);
for (j = 0; j < A.size(); j++)
{
cout << A[j] << endl;

}

RandomQuitSort(A, 0, A.size() - 1);
for (j = 0; j < A.size(); j++)
{
cout << A[j] << endl;

}

cin >> j;
}

 

//若发现代码有所问题,希望与我联系,本人感激不尽

转载于:https://www.cnblogs.com/bufferflies/p/5921557.html

你可能感兴趣的文章
java 解析excel工具类
查看>>
Google FireBase - fcm 推送 (Cloud Messaging)
查看>>
BBS论坛(二十七)
查看>>
html DOM 的继承关系
查看>>
装饰器的邪门歪道
查看>>
Dubbo常用配置解析
查看>>
【转】C#解析Json Newtonsoft.Json
查看>>
macports的安装及常用命令
查看>>
(转)使用C#开发ActiveX控件
查看>>
spring mvc 基于注解 配置默认 handlermapping
查看>>
半小时学会上传本地项目到github
查看>>
Android学Jni/Ndk 开发记录(一)
查看>>
Linux Tcl和Expect的安装
查看>>
WPF中的依赖项属性(转)
查看>>
linux防火墙相关 iptables
查看>>
最简单的单例模式
查看>>
JPopupMenu的使用以及JPopupMenu中子组件的事件处理
查看>>
从反汇编的角度看引用和指针的区别
查看>>
拓马长枪定乾坤
查看>>
UIProgressView的详细使用
查看>>