演算法之計數排序

2021-09-26 21:48:17 字數 1384 閱讀 6420

核心思想:通過計算某個資料之前有多少個資料來確定自身的位置,不通過資料之間的相互比較,所以是非比較排序。

原始計數排序:

時間複雜度:o(n+k)k為資料量

缺點:如果資料只有兩個,9999,10000,那麼會額外建立容量為10000的陣列,浪費空間。

public static int countsort1(int array) 

}//2.根據數列的最大值確定統計陣列的長度

int coutarray = new int[max + 1];

//3.遍歷數列,填充統計陣列

for (int i = 0; i < array.length; i++)

//4.遍歷統計陣列,輸出結果

int index = 0;

int sortedarray = new int[array.length];

for (int i = 0; i < coutarray.length; i++)

}return sortedarray;

}

改進之後:只會建立最大值減去最小值長度的陣列,節省空間,但只適合資料均勻分布的資料,比如,如果資料是1,10000,仍然會建立容量為10000的資料。

public static int countsort(int array) 

if (array[i] < min)

}int d = max - min;

//2.建立統計陣列並計算統計對應元素個數,countarray出儲存的值是array中資料出現的次數;countarray下標代表的意思是arry中資料排好序的相對位置

// 比如陣列array:95,96,95,99,100,99。,則對應陣列countarray,countarray[0]=2;代表95出現了兩次,,countarray[1]=1;代表96出現了1次

// ,countarray[2]=2,代表99出現了2次,countarray[3]=1,代表100出現了1次,

int countarray = new int[d + 1];

for (int i = 0; i < array.length; i++)

//3.統計陣列變形,後面的元素等於前面的元素之和

int sum = 0;

for (int i = 0; i < countarray.length; i++)

//4.倒序遍歷原始陣列,從統計陣列找到正確位置,輸出到結果陣列

int sortedarray = new int[array.length];

for (int i = array.length - 1; i >= 0; i--)

return sortedarray;

}

演算法之計數排序

原理 用乙個陣列記錄待排序陣列 現的數字。最低位代表最小值,偏移量是記錄陣列中的下標 待排序陣列 2 1 4 可以表示為 記錄陣列 1 1 0 1 陣列長度為 4 1 1 然後根據記錄陣列輸出結果 public static void countsort int arr if arr.length ...

排序演算法之計數排序

今在學習中,遇到計數排序演算法,雖然其對待排序的序列要求嚴格,但對於符合條件的序列來說,其時間複雜度很小。故列於此,僅為學習記憶。參考資料 對於僅由大寫字母 或小寫字母 構成的無序序列,可採用下面演算法進行排序。該演算法不在序列的每個元素間進行比較,而是使用了乙個額外的help整型字串來記錄每個元素...

演算法 排序之計數排序

最近想到演算法導論中的計數排序,看看理解的怎麼樣試著講講自己的理解。1 思想 計數排序 是 線性時間的 排序演算法,時間複雜度為o n 雖然有一定的侷限性。但是還是很好的一種演算法。用2個陣列進行額外的儲存資訊,陣列 c 是對 資料中值相同的 記錄下來,以便後面查閱 b 是輸出的有序陣列,再將有序的...