我在想如何計算排序,我們如何實現它,實際上是如何算法工程。我被困在一個部分,算法非常簡單易懂,但其中的一部分似乎並不必要。我認爲人們可能會誤會,但似乎每個人都使用相同的方法,所以我在某個地方被誤認了。你能解釋一下嗎?計數排序 - 效率
這是計數從geeksforgeeks
// C Program for counting sort
#include <stdio.h>
#include <string.h>
#define RANGE 255
// The main function that sort the given string arr[] in
// alphabatical order
void countSort(char arr[])
{
// The output character array that will have sorted arr
char output[strlen(arr)];
// Create a count array to store count of inidividul
// characters and initialize count array as 0
int count[RANGE + 1], i;
memset(count, 0, sizeof(count));
// Store count of each character
for(i = 0; arr[i]; ++i)
++count[arr[i]];
// Change count[i] so that count[i] now contains actual
// position of this character in output array
for (i = 1; i <= RANGE; ++i)
count[i] += count[i-1];
// Build the output character array
for (i = 0; arr[i]; ++i)
{
output[count[arr[i]]-1] = arr[i];
--count[arr[i]];
}
// Copy the output array to arr, so that arr now
// contains sorted characters
for (i = 0; arr[i]; ++i)
arr[i] = output[i];
}
// Driver program to test above function
int main()
{
char arr[] = "geeksforgeeks";//"applepp";
countSort(arr);
printf("Sorted character array is %s\n", arr);
return 0;
}
酷排序的代碼,但是這個部分:
// Build the output character array
for (i = 0; arr[i]; ++i)
{
output[count[arr[i]]-1] = arr[i];
--count[arr[i]];
}
爲什麼我需要這個?好吧,我算我的號碼:
比方說,我有數組 - > [1,3,6,3,2,4]
INDEXES 0 1 2 3 4 5 6
I created this -> [0, 1, 1, 2, 1, 0, 1]
比這部分做到這一點:
[0, 1+0, 1+1, 2+2, 4+1, 0+5, 1+5]
[0, 1, 2, 4, 5, 5, 6]
但爲什麼 ??
不能我只是用我的數組像以前那樣的人嗎?這是我的想法和我的代碼,請解釋爲什麼它是錯誤的,或者爲什麼其他方式更有用。
void countingSort (int *arr) {
int countingArray[MAX_NUM] = {0};
for (i = 0 ; i < ARRAY_SIZE ; i++)
countingArray[arr[i]]++;
int output_Index = 0;
for (i = 0 ; i < MAX_NUM ; i++)
while (countingArray[i]--)
arr[output_Index++] = i;
}
啊,我敢說你是對的! +1 – ruakh