设数组 s[ ]={93, 946, 372, 9, 146, 151, 301, 485, 236, 327, 43, 892},采用最低位优先(lsd)基数排序将 s 排列成升序序列。第 1 趟分配、收集后,元素 372 之前、之后紧邻的元素分别是:
时间: 2023-05-02 13:00:28 浏览: 209
题目中给出了一个整数数组s:s[ ]={93, 946, 372, 9, 146, 151, 301, 485, 236, 327, 43, 892},要使用最低位优先(LSD)基数排序将s 排列成升序序列。第1趟分配、收集后,元素372之前、之后紧邻的元素的元素分别是:
93 301 371 43 946 236 146 485 327 892 9 151
可以看出,372之前与之后的元素分别按个位数大小被放置在两个不同的桶里,因此372之前的元素序列和之后的元素序列在第1趟排序后变成了:
301 43 236 146 485 327 892 9 151 93 946 372
继续进行第2步及以后的操作,最终可以得到升序的序列: 9, 43, 93, 146, 151, 236, 301, 327, 372, 485, 892, 946。
相关问题
c++ 确定一个字符数组s 的所有字符是否全都不同
可以使用一个布尔型数组来记录每个字符是否出现过,如果出现过就将对应的布尔值设为true,然后遍历一遍字符数组,如果发现某个字符对应的布尔值已经是true了,说明该字符不止出现了一次,那么就可以判断该字符数组不是所有字符都不同,反之则是所有字符都不同。
下面是一个示例代码:
```c++
#include <iostream>
#include <cstring>
using namespace std;
bool isAllUnique(char* s) {
bool exists[256] = {false}; // 256是ASCII码的字符数
int len = strlen(s);
for (int i = 0; i < len; i++) {
if (exists[s[i]]) {
return false;
}
exists[s[i]] = true;
}
return true;
}
int main() {
char s1[] = "abcdefg";
char s2[] = "abcdeag";
cout << isAllUnique(s1) << endl; // 输出1
cout << isAllUnique(s2) << endl; // 输出0
return 0;
}
```
设目标串为s=”abcaabcaaabababaabca”, 模式串为p=”ababaaaba”。 则模式p的next数组的值是( ),nextval数组的值是( )。
模式串p的next数组的值为:-1, 0, 0, 1, 0, 1, 2, 2, 2。
解释:
- 第一个字符'a'的next值为-1,表示它没有前缀和后缀相同的部分;
- 第二个字符'b'的next值为0,表示它前面没有字符和它相同的前缀;
- 第三个字符'a'的next值为0,表示它前面没有字符和它相同的前缀;
- 第四个字符'b'的next值为1,表示它前面的字符"ab"和它的后缀"b"相同的长度为1;
- 第五个字符'a'的next值为0,表示它前面没有字符和它相同的前缀;
- 第六个字符'a'的next值为1,表示它前面的字符"ba"和它的后缀"a"相同的长度为1;
- 第七个字符'b'的next值为2,表示它前面的字符"aba"和它的后缀"ba"相同的长度为2;
- 第八个字符'a'的next值为2,表示它前面的字符"abab"和它的后缀"ab"相同的长度为2;
- 第九个字符'a'的next值为2,表示它前面的字符"ababa"和它的后缀"ba"相同的长度为2。
模式串p的nextval数组的值为:-1, 0, 0, 1, 0, 1, 2, 2, 2。
解释:
nextval数组的值是在next数组的基础上计算出来的,如果next[j]等于0或j等于0,则nextval[j]等于-1;否则,如果p[next[j]]等于p[j],则nextval[j]等于nextval[next[j]];否则,nextval[j]等于next[j]。
在本例中,因为p[0]等于p[3],所以nextval[3]等于nextval[next[3]],即nextval[3]等于1;因为p[1]不等于p[4],所以nextval[4]等于next[4],即nextval[4]等于0;因为p[2]不等于p[5],所以nextval[5]等于next[5],即nextval[5]等于1;以此类推,可以得到nextval数组的所有值。