sıralarını sıralamak için 5 50X daha hızlı JavaScript yerleşik tür karşılaştırır ve olduğunu. MSD sürümünü antika ve zor olarak tanımladı. Ayrıca LSD'nin uygulanmasını tavsiye etti.
Burada, bu tekniği kullanarak yarıçap sıralamasının uygulanmasını sağlarım. Sözde kod tarafından
başlayalım:
/**
* @param k: the max of input, used to create a range for our buckets
* @param exp: 1, 10, 100, 1000, ... used to calculate the nth digit
*/
Array.prototype.countingSort = function (k, exp) {
/* eslint consistent-this:0 */
/* self of course refers to this array */
const self = this;
/**
* let's say the this[i] = 123, if exp is 100 returns 1, if exp 10 returns 2, if exp is 1 returns 3
* @param i
* @returns {*}
*/
function index(i) {
if (exp)
return Math.floor(self[i]/exp) % 10;
return i;
}
const LENGTH = this.length;
/* create an array of zeroes */
let C = Array.apply(null, new Array(k)).map(() => 0);
let B = [];
for (let i = 0; i < LENGTH; i++)
C[index(i)]++;
for (let i = 1; i < k; i++)
C[i] += C[i - 1];
for (let i = LENGTH - 1; i >= 0; i--) {
B[--C[index(i)]] = this[i];
}
B.forEach((e, i) => {
self[i] = e
});
}
Ve bu sadece zor kısmı, gerisi burada
Array.prototype.radixSort = function() {
const MAX = Math.max.apply(null, this);
/* let's say the max is 1926, we should only use exponents 1, 10, 100, 1000 */
for (let exp = 1; MAX/exp > 1; exp *= 10) {
this.countingSort(10, exp);
}
}
Şimdi çok basit bir nasıl yapabilirsiniz olduğunu bu yöntemi test edin
let a = [589, 111, 777, 65, 124, 852, 345, 888, 553, 654, 549, 448, 222, 165];
a.radixSort()
console.log(a);
Son olarak, kitapta belirtildiği gibi, bu özel algoritma sadece sayma sıralaması yerinde bir sıralama algoritmasıdır, yani iki eleman birbirine bağlanırsa, girdi dizisinde onların oluşum sırası korunur.
Bu burada konu dışı. Nedenini görmek için lütfen [yardım] sayfasını ziyaret edin. Bu muhtemelen CODEREVIEW – mplungjan
adresinde daha iyi bir eşleşme oldu Sadece soru güncellendi – bendyourtaxes
Yarıçap sıralamanın standart yolu LSD. 1950'lerde kart okuyucuların günlerinden beri bu şekilde oldu. LSD ile, her bir yarıçap sıralama adımından sonra, kutular bir sonraki adım için birleştirilebilir. MSD ile, kutuları ayırmak gerekir, bu yüzden 10 baz sıralama, ilk adımda 10 kutuları, ikinci adımda 100 kutuları, üçüncü adımda 1000 kutu ..., normalde kullanılmaz. – rcgldr