കൗണ്ടിങ്ങ് സോർട്ട്
ലിസ്റ്റിലെ സംഖ്യകളെ തമ്മിൽ താരതമ്യം ചെയ്യുന്നില്ല എന്നതിനാൽ ഇത് താരതമ്യ സോർട്ട് അല്ല. ഈ അൽഗൊരിതം സ്റ്റേബിൾ ആണ്. ലിസ്റ്റിലെ സംഖ്യകളുടെ എണ്ണം n, ലിസ്റ്റിന്റെ റെയ്ഞ്ചിലെ സംഖ്യകളുടെ എണ്ണം k എന്നിവയാണെങ്കിൽ ഈ അൽഗൊരിതത്തിന്റെ മികച്ച, ശരാശരി, മോശം സമയസങ്കീർണ്ണതകളെല്ലാം O(n + k) ആണ്. അതിനാൽ k, n എന്നിവ ഏതാണ്ട് തുല്യമാണെങ്കിൽ വളരെ വേഗം സംഖ്യകളെ ക്രമീകരിക്കാൻ ഈ അൽഗൊരിതത്തിന് സാധിക്കുന്നു. ഇതിന് സമാനമായ മറ്റൊരു സോർട്ടിങ്ങ് അൽഗൊരിതമാണ് പീജിയൺഹോൾ സോർട്ട്. അൽഗൊരിതംഒരു ലിസ്റ്റ് ക്രമീകരിക്കാനുള്ള അൽഗൊരിതത്തിലെ പടികൾ:
ഇങ്ങനെ ചെയ്യുകയാണെങ്കിൽ അൽഗൊരിതം സ്റ്റേബിൾ ആവുകയും ലിസ്റ്റിൽ സംഖ്യകൾ മാത്രമല്ലാതിരിക്കുമ്പോഴും (അതായത്, കീ വില ഉള്ള സ്ട്രച്ചറുകൾക്കും ഇത് ഉപയോഗിക്കാം) സോർട്ടിങ്ങ് സാധിക്കുകയും ചെയ്യുന്നു. എന്നാൽ സംഖ്യകൾ മാത്രമാണെങ്കിൽ 3,4 പടികൾ കൂട്ടിച്ചേർക്കാം C കോഡ്സംഖ്യകൾ മാത്രമുള്ള അറേ ക്രമീകരിക്കാനുള്ള അൽഗൊരിതത്തിന്റെ C കോഡ്: void counting_sort(int *array, int size)
{
int i, min, max;
min = max = array[0];
for(i = 1; i < size; i++) {
if (array[i] < min)
min = array[i];
else if (array[i] > max)
max = array[i];
}
int range = max - min + 1;
int *count = (int *) malloc(range * sizeof(int));
for(i = 0; i < range; i++)
count[i] = 0;
for(i = 0; i < size; i++)
count[ array[i] - min ]++;
int j, z = 0;
for(i = min; i <= max; i++)
for(j = 0; j < count[ i - min ]; j++)
array[z++] = i;
free(count);
}
അവലംബം
|
Portal di Ensiklopedia Dunia