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

來源:互聯網
上載者:User
/** * 基數排序:n個d位元進行排序,先從最低有效位進行,由於每位元字都界於0到9(只考慮整數), * 可以用計數排序對每一位進行排序,重複這一過程直到對所有的d位元字都進行了排序。 * 由於計數排序的複雜度為O(n+k),所以基數排序的時間複雜度為O(d(n+k)) */public class RadixSort {/** * 用計數排序將arr數組按第i位排序 * @param arr  要排序的數組 * @param i   第i位 */static void countingSort(int arr[],int i){//存放arr中每個元素第i位的值int a[] = new int[arr.length];//b數組存放arr中現在的值,把排序結果放在 arr數組中int b[] = new int[arr.length];//c儲存從0到9每個元素在a中出現的次數,故c的長度為10。int c[] = new int[10];//把arr中的元素放到b數組中for(int j = 0;j<arr.length;j++){b[j] = arr[j];}//計算每個元素第i位的值,然後放入a數組中for(int j = 0;j<b.length;j++){int temp = (int)Math.pow(10, i);int r =  b[j]%temp;if(i>1){int x = (int)Math.pow(10, (i-1));r=r/x;}a[j]=r;}//c[j]中存放了等於j的元素的個數for(int j = 0;j<a.length;j++){c[a[j]]++;}//c[j]存放小於或等於j的元素個數for(int j = 1;j<10;j++){c[j]+=c[j-1];}//由於c[r]存放小於等於r的元素個數(r=a[j]),所以r應該放在arr數組中的c[r]位置(由於數組從0開始,所以要減1)for(int j = a.length-1;j>=0;j--){int r = a[j];arr[c[r]-1] = b[j];//每次c[r]減1可以保證下一個等於r的相同元素,落在arr[c[r]-1]的前一個位置c[r]--;}}/** * 外層排序演算法,從最低有效位到d有效位,逐位進行排序 * @param arr  數組 * @param d  d代表 每個數是幾位元 */static void radixSort(int arr[],int d){for(int i = 1;i<=d;i++)countingSort(arr,i);}//測試.....public static void main(String args[]){int arr[] = {329,457,657,839,436,720,355};radixSort(arr,3);for(int i = 0;i<arr.length;i++)System.out.println(arr[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.