我正在做一個基於計數排序的非基於比較的排序。C++實現計數排序
我在紙上做了一個模擬,但實際上在編碼時遇到了麻煩。
我知道我需要創建一個count數組,然後在計數之後使用另一個數組累加它,然後用這個數組作爲一個新的數組使用累加和對它進行排序。我怎樣才能讓count數組跟蹤?那部分讓我困惑
任何人都可以引導我在正確的方向?
int schoolToIndex(string school) {
if (school == "UCB") return 0;
if (school == "UCD") return 1;
if (school == "UCI") return 2;
if (school == "UCLA") return 3;
if (school == "UCM") return 4;
if (school == "UCSD") return 5;
if (school == "UCSF") return 6;
cerr << "Unknown school " << school << endl;
return -1;
}
/*
* Sorts students by school. An implementation of counting sort.
* @param students array already sorted by ID
* @param len Array length
*/
void sortByGroupById2(Student students[], int len) {
int temp[len];
int count[7];
// Creates an array where schools are converted to ints by using schoolToIndex
for(int i = 0; i < len; i++) {
temp[i] =schoolToIndex(students[i].getSchool());
}
for(int i =0; i < 7; i++) {
count[i]=0;
}
for(int j =0; j < len; j++) {
count[temp[j]]++;
cout << j << " " << count[j] << endl;
}
}
使用
Joe Paarmann,10000010,UCSF
Otha Baloy,10000053,UCSD
Alton Hamblet,10000110,UCM
Jessie Merle,10000345,UCI
Lawanda Doell,10000455,UCM
Alva Zajicek,10000479,UCI
Chester Kemfort,10000529,UCD
Alice Mines,10000579,UCI
Gary Vongunten,10000875,UCM
Adrian Shbi,10001036,UCSD
爲什麼要計算累計和?也許你的問題會更明確,如果你會多說一點你的實際使用案例。你有一組學生,你想按照學生數量來分類學校,對吧? – user463035818
你的'count'數組最好是七個項目,不能少。開始計數正確。只需在'tmp'中獲得學校索引。如果它大於等於0(爲了安全起見,小於7)只需要++計數[tmp];'。完成後'count []'會有你需要的計數。這至少會讓你開始。 – WhozCraig
累計和數組用於製作排序後的數組。我有一組已經按照ID排序的學生,但是我希望他們按照學校名稱的字母順序排序,ID按升序排序。 –