私はソートを数え、それをどのように実装するか、実際にアルゴリズムの仕組みについて考えていました。私は1つの部分で立ち往生している、アルゴリズムは本当に簡単で理解しやすいですが、その一部は必要ではないようです。私は人々が間違っているかもしれないと思っていましたが、同じ方法を使用しているみんなのように見えますので、私はどこかで間違っています。あなたは説明していただけますか?ソートの計算 - 効率
はここ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]];
}
なぜ私はこれが必要なのですか? [OK]を私は私の数字をカウント:
のは、私は配列を持っていたとしましょう - この部分よりも> [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