Стабильный подсчет сортировка списка в C
Как получить стабильную сортировку подсчета для массива идентификаторов, связанных со счетом
удается отсортировать один массив типа {1,3,2,1,5}, но не удается сделать это для ниже
Ввод:
int main() { //Note: The sample is sorted by "student id" struct SResult sample[] = { {"A1234", 10}, {"A1239", 5}, {"A1394", 7}, {"A1434", 3}, {"A1454", 5}, {"A2884", 7}, {"A3235", 7}, {"A4334", 9}, {"A4884", 2}, {"A6934", 5}, {"A7265", 7}, {"A9559", 3} }; struct SResult sorted[12] = {{0}}; int i; counting_sort(sample, 12, sorted); for (i = 0; i < 12; i++){ printf("[%s, %d]\n", sorted[i].studentID, sorted[i].score); } printf("\n"); return 0; }
Что я уже пробовал:
struct SResult { char studentID[6]; int score; }; void counting_sort(struct SResult scoreArr[], int N, int final[]) { int freq[11] = {0}, cfreq[11] = {0}; int i, curScore; //1. Compute Frquency for (i = 0; i < N; i++){ freq[ scoreArr[i].score ] ++; } //2. Compute Cumulative Frequency cfreq[0] = freq[0]; for (i = 1; i < 11; i++){ cfreq[i] = cfreq[i-1] + freq[i]; } //3. Produce Final Position for (i = 0; i < N; i++){ curScore = scoreArr[i].score; final[ cfreq[ curScore ] - 1 ] = curScore; cfreq[curScore]--; } }
OriginalGriff
Что вы сделали до сих пор для создания списка, сортировки списка и т. д.?
JiaWei Lee
попробовал что такое код в разделе Что я пробовал
OriginalGriff
В этом коде нет списка - это массив.
JiaWei Lee
да это массив
OriginalGriff
Так почему же вы говорите о списках и в чем проблема, с которой вы столкнулись?
Здесь важно быть точным: помните, что мы не можем видеть ваш экран, получить доступ к вашему жесткому диску или прочитать ваши мысли - мы получаем только то, что вы печатаете для работы. Поэтому, если вы говорите о списках, мы предполагаем, что вы имеете в виду связанный список, с которым сложнее работать, чем с массивом. Скажите нам, что вы имеете в виду, и объясните, какая помощь вам нужна, и мы сделаем все, что в наших силах.