我撰寫此代碼是為了在 C 中實作計數排序。但是它似乎無法正常作業。我創建了一個包含 10 個元素的陣列,然后應用計數排序的步驟。基本上它對第一個元素進行排序,然后作為最后一個元素,它使用原始陣列的最后一個元素。我不明白問題出在哪里。代碼:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
// create an array of 100 random elements
// int my_array[10];
int my_array[] = { 10, 10, 9, 9, 6, 5, 4, 3, 2, 1 };
srand(time(NULL));
int i;
int N = 10;
/* for (i = 0; i < 10; i ) {
my_array[i] = rand() % 100 1;
} */
// print the array
for (i = 0; i < 10; i ) {
printf("%d\n", my_array[i]);
}
// define the minimum and the maximum as the first element of the array
int min_array = my_array[0];
int max_array = my_array[0];
printf("--------------\n");
// find the minimum and the maximum of the array
for (i = 0; i < N; i ) {
if (my_array[i] < min_array) {
min_array = my_array[i];
}
else if (my_array[i] > max_array) {
max_array = my_array[i];
}
}
// check if it worked
printf("max_array %d\n", max_array);
printf("min_array %d\n", min_array);
//
int range_array;
range_array = max_array - min_array 1;
int count_array[range_array 1];
for (i = 0; i < range_array; i )
count_array[i] = 0;
int j = 0;
for (int i = 0; i < 10; i ) {
count_array[my_array[i] - min_array] = count_array[my_array[i] - min_array] 1;
}
int z = 0;
for (i = min_array; i < max_array; i ) {
for (j = 0; j < count_array[i - min_array]; j )
my_array[z ] = i;
// z = z 1;
}
for (i = 0; i < N; i ) {
printf("%d\n", my_array[i]);
}
}
還有一種可能的輸出:
10 10 9 9 6 5 4 3 2 1
--------------
max_array 10
min_array 1
--------------
1 2 3 4 5 6 9 9 2 1
如您所見,從 1 到 9 的數字是有序的,而最后一個 10 是無序的,它使用第一個數字,即 1 和 2。
uj5u.com熱心網友回復:
重建陣列時,您希望包含值為 的元素max_array。
i<max_array
應該
i<=max_array
附帶說明一下,您永遠不會使用 的最后一個元素count_array,因此它應該小一個元素。
int count_array[range_array 1];
應該
int count_array[range_array];
(由@user3386109 發現)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/419805.html
標籤:
