演算法導論學習筆記——計數排序演算法

來源:互聯網
上載者:User
/** * 計數排序假設n個輸入元素中的每一個都是介於0和k之間的整數, 此處k為某個整數 *基本思想為:對每一個輸入元素經,確定出小於x的元素個數,這樣就可以把x直接放到它在最終輸出數組中的位置上。 *演算法複雜度為O(n+k),當k=O(n)時,其已耗用時間為O(n) *另一個特點:計數排序是穩定的,具有相同值的元素在輸出數組中的相對次序與它們在輸入數組中的次序相同 */public class CountingSort {/** * @param a  //存放需要排序的原數組 * @param b  //存放排序結果的數組 * @param k  //a中的每個元素都介於0和k之間 */static void countingSort(int a[],int b[],int k){//c數組為臨時儲存區,c儲存從0到k每個元素在a中出現的次數,故c的長度為k+1。int c[]= new int[k+1];//c[i]中存放了等於i的元素的個數(0=< i <=k)for(int i = 0;i<a.length;i++)c[a[i]]++;//c[i]存放小於或等於i的元素個數for(int i = 1;i<=k;i++)c[i]=c[i]+c[i-1];//由於c[i]存放小於等於i的元素個數,所以i應該放在b數組中的c[i]位置(由於數組從0開始,所以要減1)for(int r = a.length-1;r>=0;r--){int i = a[r];b[c[i]-1] = i;//每次c[i]減1可以保證下一個等於i的相同元素,落在b[c[i]-1]的前一個位置c[i]--;}}//測試.....public static void main(String[] args) {int a[]={2,5,3,0,2,3,0,3};int b[]= new int[8];countingSort(a,b,5);for(int i =0;i<b.length;i++)System.out.println(b[i]);}}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.