0
我的計數排序有問題。當我將表排序有時它工作,但有時沒有(當k ==大小時它不工作),我不知道爲什麼。請幫忙。這是我的代碼:計數排序C
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#define MAX 100000
int tabA[MAX];
int tabB[MAX];
int tabC[MAX];
int k;
void scope(int size){
int i, max = 0, min;
min = tabA[1];
for(i = 1; i <= size; i++){
if(tabA[i] > max)
max = tabA[i];
if(tabA[i] < min)
min = tabA[i];
}
k = max - min + 1;
}
void rand1(int size){
int i;
srand(time(NULL));
for(i = 0; i <= size; i++)
tabA[i] = rand() % 8;
}
void countingsort(int size){
int i;
for(i = 0; i < k; i++)
tabC[i] = 0;
for(i = 0; i < size; i++)
tabC[tabA[i + 1]] = tabC[tabA[i + 1]] + 1;
for(i = 1; i <= k; i++)
tabC[i] = tabC[i] + tabC[i - 1];
for(i = size; i >= 1; i--){
tabB[tabC[tabA[i]]] = tabA[i];
tabC[tabA[i]] = tabC[tabA[i]] - 1;
}
}
int main(void){
int size, i;
printf("Please write how many numbers you wont to sort: ");
scanf("%d", &size);
rand1(size);
scope(size);
countingsort(size);
printf("Numbers to sort:\n");
for(i = 1; i <= size; i++)
printf("%d\n", tabA[i]);
printf("\nK: %d\n\n", k);
printf("Sorting numbers:\n");
for(i = 1; i <= size; i++)
printf("%d\n", tabB[i]);
return 0;
}
感謝所有的幫助。
爲什麼你在countingsort中從1到k的循環中在'tabC'中累加數字。此外,爲什麼你的第一個循環從0到k獨佔,第二個從1到k?計數排序應該佔用4行。我認爲你過於複雜。 –
因爲我有這樣的代碼: http://inf.ug.edu.pl/~gmadejsk/asd/img/countingsort.png – henio180
我從來沒有看到這種計數排序的實現。仍然注意到最底部的循環超過'j',而用於數組元素的索引變量是'i' ...這段代碼對我來說似乎很陌生... –