Java實現計數排序

ymny 9年前發布 | 806 次閱讀 Java 排序

    package linetimesort;
/**

 * 計數排序假設n個輸入元素中的每一個都是介于0到k之間的某個整數,k為某個整數;它 
 * 通過確定小于等于一個數的數的個數來確定這個數應該放在哪個位置 
 * @author yuncong 
 * 
 */  
public class CountSort {  
    /** 
     *  
     * @param a 排序前的數組 
     * @param b 排序后的數組 
     * @param k 排序數組中最大元素的值 
     */  
    public void sort(int[] a, int[] b, int k){  
        // 創建數組c,并初始化  
        int[] c = new int[k + 1];  
        for (int i = 0; i < c.length; i++) {  
            c[i] = 0;  
        }  
        // 統計數組a中每個元素出現的次數  
        for (int i = 0; i < a.length; i++) {  
            c[a[i]]++;  
        }  
        /** 
         * 統計數組a中小于等于某一個數的數的個數; 
         * 因為小于等于0的數的個數就是等于0的數的個數,所迭代從1開始 
         */  
        for (int i = 1; i < c.length; i++) {  
            c[i] = c[i] + c[i - 1];  
        }  
        for (int i = 0; i < a.length; i++) {  
            /** 
             * 小于等于a[i]的數的個數為x就應該將該數放在數組b的第x-1個位置, 
             * 因為數組的下標從0開始 
             */  
            b[c[a[i]] - 1] = a[i];  
            /** 
             * 下一個a[i]排在這個a[i]的前面; 
             * 下一個a[i]排在前面的原因是前面為所有小于等于a[i]的數留足了空間 
             */  
            c[a[i]]--;  
        }  
    }  

    public static void main(String[] args) {  
        int[] a = new int[]{3, 1, 14, 5, 6};  
        int[] b = new int[5];  
        new CountSort().sort(a, b, 14);  
        for (int i = 0; i < b.length; i++) {  
            System.out.println(b[i]);  
        }  
    }  

}  </pre> 


 本文由用戶 ymny 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!