1. 程式人生 > >計數排序——Counting Sort

計數排序——Counting Sort

ati post int static 我們 gpo 集合 需要 num

一、簡介

  1954年提出,是一個不需要比較的,類似於桶排序的線性時間排序算法。該算法是對於已知數量範圍的數組進行排序。時間復雜度為O (n),適用於小範圍集合的排

序。計數排序是用來排序0到100之間的數 字的最好的算法。

二、基本思想

  對於給定的輸入序列中的每一個元素x,確定該序列中值小於x的元素的個數。一旦有了這個信息就可以直接將x存放到正確的位置上。我們可以使用一個數組C,用來記錄

記錄要排序數組中對應記錄出現的個數。

  eg:要排序的數組A= {1,1,1,1,0,0,3}

  這裏邊最大的數為3,最小為0,那麽我們創建一個長度為4的數組C掃描一遍數組A,將其要排序的數據個數記錄在數組C中,如C[3]= 1,c[0] = 2,這樣,我們根據數組c

將,數據寫入數組B,數據1,分別寫入B[0]B[1]B[2]B[3],3寫入B[6]。最後數組B內的數據為排序好的結果。

三、代碼

public static int[] sort(int[] A,int num)
{
    int[] B = new int[num];
    int[] C = new int[100];
    for(int i=0;i<num;i++)
    {
      C[A[i]]++;
    }

    for(int i = 1;i<100;i++)
    {
      C[i] = C[i]+C[i-1];
    }

    for(int i = A.length-1;i>=0;i--)
    {
      B[(C[A[i]]-1)] = A[i];
      C[A[i]]--;
    }
    return B;
  }

}

計數排序——Counting Sort