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

来源:互联网 发布:js鼠标滚动条事件 编辑:程序博客网 时间:2024/05/17 22:42
/*ID: j.sure.1PROG: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 longusing 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;}

0 0
原创粉丝点击