乙個元素在乙個序列中的名次是所有比它小的元素個數與在它的前面出現的和它相同的元素個數之和。比如,陣列 a = [3,2,2,1,5] 是乙個序列,各元素的名次為 r = [3,1,2,0,4].
先來看乙個求名次的函式:
#includeusing namespace std;
/**求陣列元素的名次,結果存入r中
**/template void rank(t arr, int n, int r)
//從第乙個元素開始兩兩比較所有元素
for (int i = 1; i < n; i++) }
}
int main(int argc, char ** ar**)
; cout << "原陣列:" << endl;
for (int i = 0; i < 10; i++)
int b[10];
//排名次
rankarr(a, 10, b);
cout << "名次:" << endl;
for (int i = 0; i < 10; i++)
sleep(10000);
}
結果:
陣列a的元素計算出名次後,就可以按照名次移動到相應位置,這樣就可以按照遞增的順序對陣列元素進行排序,即a[1]≤a[2]≤a[3]...a[n-1]。現在來看**實現:
//計數排序,名次排序
template void ranksort(t a, int n, int r)
//把b中元素移回到a
for (int i = 0; i < n; i++)
}
int main(int argc, char ** ar**)
; cout << "原陣列:" << endl;
for (int i = 0; i < 10; i++)
int b[10];
//排名次
rankarr(a, 10, b);
//按名次排序
ranksort(a,10,b);
cout<< endl;
cout << "排序後:" << endl;
for (int i = 0; i < 10; i++)
sleep(10000);
}
排序演算法之計數排序
今在學習中,遇到計數排序演算法,雖然其對待排序的序列要求嚴格,但對於符合條件的序列來說,其時間複雜度很小。故列於此,僅為學習記憶。參考資料 對於僅由大寫字母 或小寫字母 構成的無序序列,可採用下面演算法進行排序。該演算法不在序列的每個元素間進行比較,而是使用了乙個額外的help整型字串來記錄每個元素...
演算法 排序之計數排序
最近想到演算法導論中的計數排序,看看理解的怎麼樣試著講講自己的理解。1 思想 計數排序 是 線性時間的 排序演算法,時間複雜度為o n 雖然有一定的侷限性。但是還是很好的一種演算法。用2個陣列進行額外的儲存資訊,陣列 c 是對 資料中值相同的 記錄下來,以便後面查閱 b 是輸出的有序陣列,再將有序的...
排序演算法之計數排序
計數排序的思想特別簡單,就是記錄下序列中每個元素出現的次數,然後根據儲存次數的下標及出現次數將元素放回原陣列。時間複雜度為o n 資料範圍 空間複雜度為o 最大數 最小數 實現 pragma once int findmax int array,const int size return max i...