排序並求出排名 |
尚未結案
|
Kioarena
一般會員 發表:3 回覆:12 積分:3 註冊:2005-03-02 發送簡訊給我 |
|
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
Kioarena 您好: 我不確定有沒有誤解您的意思?如果您是要列出排序後的名次的話,可參考一下下列作法:
int list[] = {84, 90, 85, 73}; //... 此處執行排序動作 .... int cnt = sizeof(list)/sizeof(int); for (int i=cnt-1; i>=0; i--) { Memo1->Lines->Add("第 " IntToStr(cnt-i) " 名:" IntToStr(list[i])); }7 天天敲鍵盤 v 時時按滑鼠 8 |
derrenbol1
中階會員 發表:5 回覆:113 積分:93 註冊:2004-12-09 發送簡訊給我 |
|
Kioarena
一般會員 發表:3 回覆:12 積分:3 註冊:2005-03-02 發送簡訊給我 |
很抱歉,可能我說的不是很清楚。
舉個ex.list[]={84,90,85,73}
list[0]=84 對應初始rank=1
list[1]=90 對應初始rank=2
list[2]=85 對應初始rank=3
list[3]=73 對應初始rank=4
--------------------------------------
排序結束
list[0]=73,list[1]=84,list[2]=85,list[3]=90
84從a[0]變到a[1]所以原本rank從1變成2
73從a[3]變到a[0]所以原本rank從4變成1
也就是一開始是按照維度順序給定rank,最後得到排序後,再給定排名
|
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
Kioarena 您好: 呵呵~我有點不敢回覆了....< >是這樣子嗎?還是我又會錯意了....< >
int list[] = {84, 90, 85, 73}; int cnt = sizeof(list) / sizeof(int); Memo1->Lines->Add("排序前:"); for(int i=0; i7 天天敲鍵盤 v 時時按滑鼠 8 |
Kioarena
一般會員 發表:3 回覆:12 積分:3 註冊:2005-03-02 發送簡訊給我 |
|
derrenbol1
中階會員 發表:5 回覆:113 積分:93 註冊:2004-12-09 發送簡訊給我 |
|
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
|
Kioarena
一般會員 發表:3 回覆:12 積分:3 註冊:2005-03-02 發送簡訊給我 |
|
haman
中階會員 發表:46 回覆:137 積分:56 註冊:2005-03-10 發送簡訊給我 |
引言: 很抱歉,可能我說的不是很清楚。 舉個ex.list[]={84,90,85,73} list[0]=84 對應初始rank=1 list[1]=90 對應初始rank=2 list[2]=85 對應初始rank=3 list[3]=73 對應初始rank=4 -------------------------------------- 排序結束 list[0]=73,list[1]=84,list[2]=85,list[3]=90 84從a[0]變到a[1]所以原本rank從1變成2 73從a[3]變到a[0]所以原本rank從4變成1 也就是一開始是按照維度順序給定rank,最後得到排序後,再給定排名你指的是排序結束 list[0]=73,list[1]=84,list[2]=85,list[3]=90 84從a[0]變到a[1]所以原本rank1的內容變成rank2的內容 73從a[3]變到a[0]所以原本rank4的內容變成rank1的內容 嗎?? 如果是這樣的話你在排序時就可以一起做了 借用一下RedSnow大大的code...cc int list[] = {84, 90, 85, 73}; //... 此處執行排序動作 .... //對調的地方改成 int iTmp = list[i]; list[i] = list[i 1]; list[i 1] = iTmp; String strTmp = rank[i 1]; rank[i 1] = rank[i 2]; rank[i 2] = strTmp; //... int cnt = sizeof(list)/sizeof(int); for (int i=cnt-1; i>=0; i--) { Memo1->Lines->Add("第 " IntToStr(cnt-i) " 名:" IntToStr(list[i])); } |
haman
中階會員 發表:46 回覆:137 積分:56 註冊:2005-03-10 發送簡訊給我 |
|
derrenbol1
中階會員 發表:5 回覆:113 積分:93 註冊:2004-12-09 發送簡訊給我 |
To Kioarena : 那我覺得您連排序都省了, 提供一個更沒效率的方法給客倌您看看: class="code">
for( i = 0 ; i < cnt ; i ) {
rank = 1;
for( j = 0 ; j < cnt ; j )
if((i!=j)&&(list[j]>list[i]))
rank ;
Memo1->Lines->Add(IntToStr(list[i]) " 排名== " IntToStr(rank))
}
這種方式很像索引值排序, 但針對每個元素再從頭找起. 發表人 - derrenbol1 於 2005/09/21 20:46:26
|
Kioarena
一般會員 發表:3 回覆:12 積分:3 註冊:2005-03-02 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |