計數排序此處的實現時間複雜度為o(n+k),空間複雜度為o(k),不穩定。--要實現空間複雜度為o(k),則會犧牲掉穩定性。要實現穩定性,則空間複雜度為o( n+k)。
因為本次要排序的元素都是int型別,不需要實現穩定性。而有些時候,排序的元素不屬於基本型別,用於排序的鍵實際上只是這個元素中的乙個屬性(鍵值相同,而元素可能不同),如果不實現穩定性,則會破壞鍵值相等的兩個元素的相對位置。
/*************************
name:vincentzeng
e-mail:[email protected]
function implemeted:countingsort
*****************************/
public class testcountingsort
; system.out.println("array:");
for( int n : a)
system.out.print(n + " ");
system.out.println();
countingsort.countingsort(a);
system.out.println("sorted:");
for( int n : a)
system.out.print(n + " ");
system.out.println();
}}class countingsort
int k = max - min + 1;
int counter = new int[k]; //建立乙個下標對應目標陣列的值,值對應 下標所對應的目標陣列的值 的出現次數。
for(int n : a) //計算 counter 陣列的值
counter[ n - min ]++;
//填充目標陣列為有序陣列。
int j = 0;
for(int i = 0;i < a.length;i++) //只用了counter,空間複雜度為o(k)
if(counter[m] == 0)
m++;
}} }
}
排序穩定性
這幾天筆試了好幾次了,連續碰到乙個關於常見排序演算法穩定性判別的問題,往往還是多選,對於我以及和我一樣拿不準的同學可不是乙個能輕易下結論的題目,當然如果你筆試之前已經記住了資料結構書上哪些是穩定的,哪些不是穩定的,做起來應該可以輕鬆搞定。本文是針對老是記不住這個或者想真正明白到底為什麼是穩定或者不穩...
排序演算法穩定性
學習中,有個問題叫做排序演算法穩定性 若待排序的序列中,存在多個具有相同關鍵字的記錄,經過排序,這些記錄的相對次序保持不變,則稱該演算法是穩定的 若經排序後,記錄的相對 次序發生了改變,則稱該演算法是不穩定的。假定在待排序的記錄序列中,存在多個具有相同鍵值的記錄,若經過排序,這些記錄的相對次序保持不...
排序演算法穩定性
快速排序 希爾排序 堆排序 直接選擇排序不是穩定的排序演算法,而基數排序 氣泡排序 直接插入排序 折半插入排序 歸併排序是穩定的排序演算法 首先,排序演算法的穩定性大家應該都知道,通俗地講就是能保證排序前2個相等的數其在序列的前後位置順序和排序後它們兩個的前後位置順序相同。在簡單形式化一下,如果ai...