您的位置:首页 > 其它

手写快速排序【随机数作基数】

2014-11-02 15:49 155 查看
/*
ID: j.sure.1
PROG:
LANG: C++
*/
/****************************************/
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <stack>
#include <queue>
#include <vector>
#include <map>
#include <string>
#include <climits>
#include <iostream>
#define LL long long
using namespace std;
const int INF = 0x3f3f3f3f;
/****************************************/
int part(int *a, int l, int r)
{
srand(time(0));
int i = int(rand() % (r-l+1) + l);//取l~r随机数
int key = a[i];
a[i] = a[l];
//现在key是基数,a[l]留作安放键值
while(l < r) {
while(l < r && a[r] >= key) r--;
a[l] = a[r];//自右向左找到第一个小于基数的,安放在a[l]
while(l < r && a[l] <= key) l++;
a[r] = a[l];//自左向右找到第一个大于基数的,安放在a[r]
}
a[l] = key;//此时l==r,key左边的值都比它小,右边都比它大
return l;
}

void Qsort(int *a, int l, int r)
{
if(l < r) {
int m = part(a, l, r);
Qsort(a, l, m-1);
Qsort(a, m+1, r);
}
}

int main()
{
int a[7];
for(int i = 0; i < 6; i++) {
scanf("%d", &a[i]);
}
Qsort(a, 0, 5);
for(int i = 0; i < 6; i++) {
printf("%d ", a[i]);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐