計數排序並不是傳統意義的比較排序,即並非通過數字之間的相互比較來決定順序。
思想:遍歷陣列arr,將arr[i]所為索引,arr[i]出現的次數作為值存入新的陣列中,通常稱為桶,因為arr[i]就是新陣列中的索引,這個數字越大,在桶中的位置越靠後,這個過程即是在排序。
例如:arr = [1,4,3,0,2,1];
在桶裡的結果就是bucket = [1,2,1,1,1,0];
解釋:桶陣列裡,索引為0,就是arr[3],出現了一次,所以bucket[0] = 1,
索引為1,就是arr[0],出現了一次,所以bucket[1] = 1,
索引為4, 就是arr[2],出現了一次,bucket[4] = 1,
索引為5,在arr中沒有,即出現0次,所以bucket[5] = 0
**演示如下:
注意,如果數值太大會導致桶的容量很大。
**實現如下:
let numbers = [54, 68, 12, 34, 3, 2, 5, 61, 5, 4, 84, 94];
function getmax(arr)
function countingsort(arr, max)
bucket[arr[i]]++;
}let output = ;
for (let j = 0; j < bucketlen; j++)
}return output;
}console.log(countingsort(numbers, getmax(arr)));
這種排序演算法速度會比較快,但是相應的會導致空間複雜度很高。 氣泡排序演算法及優化
氣泡排序是一種典型的交換排序演算法,通過交換資料元素的位置進行排序。從序列頭部開始,進行兩兩比較,根據大小交換位置,直到最後將最大 小 的資料元素交換到了佇列的隊尾,從而成為有序序列的一部分 下一次繼續這個過程,直到所有資料元素都排好序。演算法的核心在於每次通過兩兩比較交換位置,選出剩餘無序序列裡最...
氣泡排序及演算法優化
用雙重迴圈來控制,當相鄰元素不滿足要求的順序排列 從小到大或從大到小 時,就將兩元素交換位置,以此逐漸遍歷。void bubblesort int array long endtime system.currenttimemillis 列印排序後的前10個數 for int i 0 i 10 i s...
氣泡排序演算法及優化
正常的兩兩交換實現 private static void sort1 int a time system.out.println 跑了 time 次 system.out.println arrays.tostring a 當陣列後面的排好過後就不在執行實現 private static void...