计数排序有点看不懂

来源:百度知道 编辑:UC知道 时间:2024/06/10 19:15:30
a为输入,b为输出,l为元素个数,k为元素最大值。

void Counting_Sort(int a[], int b[], int l, int k)
...{
int* c = new int[k];
memset(c, 0, k * sizeof(int));

for (int j = 0; j < l; j++) c[a[j]]++;//数组下标里的数组 弄得我很郁闷啊,这个是什么意思?为什么循环一次加一次》
for (int j = 1; j < k; j++) c[j] += c[j - 1];//这个循环又是什么?
for (int j = l - 1; j >= 0; j--)
...{
b[c[a[j]] - 1] = a[j];//这句什么意思?
c[a[j]]--;//又是下标里的数组~~~
}

delete c[];
}

还有就是对于线性表输入的要求:输入的线性表的元素属于有限偏序集S;

什么是有限偏序集?

复制的就不要啦,回答好的再加分啊 谢谢了啊。主要讲解一下数组下标里的数组是什么意思,弄的很迷茫
你说的那些我明白了。 但是我有点不明白,这样的数组,在编译系统里是如何执行的?

所谓“数组下标里的数组”, 那数组下标是个a[j], 这也就是个数而已, 这个数什么意思你知道的话, 用它做下标什么意思也就显然了, 别说就这么两层, 就10层20层也就是这么个意思, 没别的

假设 a数组里可能有0-9的数, 那么我就先做一个 数组 c[10], 对应里面每一位 c[n]就是n这个数出现在a数组里几次。 比方说 a[0]里面是个2, 哪么就c[2] ++。 所以逻辑就是, 对每个i,c[a[i]] ++

后面那个循环的处理比较不自然, 有点难理解也正常。 目的就是达到c[i]里存放的是: 有多少个数比i小。 你对比我上面那段里说的c[i]的内容想象就知道为什么这样的操作能达成这个目的。 实现了这个目的之后, 实际上c[i]里面的内容就成了, i这个数的顺序了

下面就跟第一部分差不多的意思 你自己琢磨把

c语言里嵌套使用各种语法是非常正常的, 函数、数组、表达式基本上都是随便嵌套的, 嵌套了的就一层一层看, 要是每多一层都得问人那也就别学编程了

至于那个有限偏序集, “有限”基本上是废话, “偏序集”纯粹是废话, 不是偏序集哪会有什么排序