演算法 計數排序及優化

2021-10-10 11:16:34 字數 896 閱讀 2576

計數排序並不是傳統意義的比較排序,即並非通過數字之間的相互比較來決定順序。

思想:遍歷陣列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...