你说得对,但是基数排序
2024-04-27 17:27:17
发布于:广东
41阅读
0回复
0点赞
#include <iostream>
#include <cstdio>
//#include <windows.h>
#include <vector>
#include <ctime>
using namespace std;
int a[5000005];
vector <int> jishu[1005];
//基数排序
void radixsort(int, int, int);
int getweishu(int x, int r){//求位数
int ct = 0;
while(x){
ct++;
x /= r;
}return ct;
}int pow(int r, int i){//pow
int ct = 1;
while(i--){
ct *= r;
}return ct;
}
void radixsort(int *a, int len, int r){
int weishu = 0;
for(int i = 1; i <= len; i++){
weishu = max(weishu, getweishu(a[i], r));//确定最大数的位数
}
int dgt, x;
for(int i = 1; i <= weishu; i++){//重复位数次排序
dgt = pow(r, i - 1);
for(int j = 1; j <= len; j++){
x = a[j] / dgt % r;//求这个数的第x位
jishu[x].push_back(a[j]);//录入数
}
int ct = 1;
for(int i = 0; i < r; i++){
for(int j = 0; j < jishu[i].size(); j++){
a[ct++] = jishu[i][j];//复制回数组
}jishu[i].clear();//清空vector
}
}
}
int main(){
//srand(time(0));
int n, k;
scanf("%d%d", &n, &k);
for(int i = 1; i <= n; i++) scanf("%d", &a[i]);
radixsort(a, n, 1000);
printf("%d", a[k + 1]);
return 0;
}
时间复杂度:
空间复杂度:
这里空空如也
有帮助,赞一个