計數排序

前言

原理後續補齊。數組

代碼

public static int[] countSort(int[] array)
{
    // 取得計數排序範圍
    int max = array[0];
    int min = array[0];
    for (int i = 1; i < array.Length; i++)
    {
        if (array[i] > max)
        {
            max = array[i];
        }

        if (array[i] > min)
        {
            min = array[i];
        }
    }
    int d = max - min;
    // 將數組填充
    int[] countArray = new int[d+1];
    for (int i=0; i < array.Length; i++)
    {
        // 若是有某個數就加1
        countArray[array[i]-min]++;
    }
    // 統計數組,每一個是前面數組之和
    for (int i=1;i<countArray.Length;i++)
    {
        countArray[i] += countArray[i - 1];
    }
    //開始排序
    int[] sortedArray = new int[array.Length];
    for (int i=array.Length-1;i>=0;i--)
    {
        sortedArray[countArray[array[i] - min]-1]=array[i];
        countArray[array[i] - min]--;
    }
    return sortedArray;
}
相關文章
相關標籤/搜索