1 #include <iostream>23 using namespace std;45 const int MAXN = 105;67 int n, m, k, val[MAXN];8 int temp[MAXN], cnt[MAXN];910 void init()11 {12 cin >> n >> k;13 for (int i = 0; i < n; i++) cin >> val[i];14 int maximum = val[0];15 for (int i = 1; i < n; i++)16 if (val[i] > maximum) maximum = val[i];17 m = 1;18 while (maximum >= k) {19 maximum /= k;20 m++;21 }22 }2324 void solve()25 {26 int base = 1;27 for (int i = 0; i < m; i++) {28 for (int j = 0; j < k; j++) cnt[j] = 0;29 for (int j = 0; j < n; j++) cnt[val[j] / base % k]++;30 for (int j = 1; j < k; j++) cnt[j] += cnt[j - 1];31 for (int j = n - 1; j >= 0; j--) {32 temp[cnt[val[j] / base % k] - 1] = val[j];33 cnt[val[j] / base % k]--;34 }35 for (int j = 0; j < n; j++) val[j] = temp[j];36 base *= k;37 }38 }3940 int main()41 {42 init();43 solve();44 for (int i = 0; i < n; i++) cout << val[i] << ;45 cout << endl;46 return 0;47 }假设输入的 n 为不大于 100 的正整数,k 为不小于 2 且不大于 100 的正整数,val[i]在 int 表示范围内,完成下面的判断题和单选题:
判断题
这是一个不稳定的排序算法。( )
该算法的空间复杂度仅与 n 有关。( )
该算法的时间复杂度为。( ) 单选题
当输入为“5 3 98 26 91 37 46”时,程序第一次执行到第 36 行,val[]数组的内容依次为( )。
若 val[i]的最大值为 100,k 取( )时算法运算次数最少。
当输入的 k 比 val[i]的最大值还大时,该算法退化为( )算法。