桶排序和基數排序

2021-09-13 11:31:36 字數 1792 閱讀 3991

方法一:每個桶只放相同的數字

入桶過程:

1、 把正數和0存入正數桶,把負數存入負數桶;

2、 把陣列中的每項作為正數桶或負數桶的下標存入到對應的key裡;

出桶過程:

先遍歷正數桶或負數桶,因為桶裡每項都是陣列,在遍歷每項

function bucketsort(array)

negativebucket[abs].push(array[i])

}else

bucket[array[i]].push(array[i])}}

//出桶

var l = negativebucket.length

for(var i = l - 1; i >= 0; i --)}}

for(var i = 0; i < bucket.length; i++)}}

return result

}var a = [1,23,5,6,7,-6,-9,-11,0,-1,-55,-4,7,4,1,222,3,7]

bucketsort(a)

方法二:每個桶放乙個範圍的數

function bucketsort(array, step) 

if (array[i] < min)

}min = min - 1; //如果 array 中有 4 個數,定義每個桶放 2 個數,那只要 2 個桶就夠了,最後結果會少乙個數,最小數上 -1,需要的桶就會變成 3 個

bucketcount = math.ceil((max - min) / step); // 需要桶的數量,和 bucket.length相等

console.log(bucketcount)

for (i = 0; i < l; i++)

// 通過插入排序將數字插入到桶中的合適位置

s = bucket[j].length; //前兩次 s 是 0,第三次 s 為 1

if (s > 0) else

}bucket[j][k + 1] = temp; //這裡 j 取值 0,也就是說放入第乙個桶,k + 1 往後放

}else if(s <= 0) }}

}for (i = 0; i < bucketcount; i++) }}

return result;

}var a = [-3,-1,0]

bucketsort(a)

排序過程:準備 0-9 號十個桶

第一次迴圈:

入桶:按個位數排序,依次放入0-9號桶內

出桶:從 0 號桶依次開始,按先入先出的方式出桶

第二次迴圈

入桶:按十位數排序,依次放入0-9號桶內,位數不夠的補 0

出桶:從 0 號桶依次開始,按先入先出的方式出桶

第三次按百位排序... 第四次按千位排序...

直到全部排完

function radixsort(array)

}for(i = 0; i < 10; i++)

var loop = (max + '').length

for(i = 0; i < loop; i++)else

}array.splice(0,array.length) //清空陣列

for(j = 0; j < 10; j++)

bucket[j] = //清空桶}}

return array

}a=[22,3,33,2,1,777]

radixsort(a)

基數排序和桶排序

基數排序是針對特定場景做出的排序方法 特定場景具體指的是 待排序的序列每個元素都是由一組有固定長度,且每個 字元 都是在一定數值範圍內。說的有點繞,舉個栗子 目前也只知道這個場景 一組有相同長度的字串需要進行排序,每個字串長度一定,每個字串的每乙個字元都是a z 0 9,假設都是大寫。這個時候就可以...

基數排序(桶排序)

1。什麼是基數排序 radix sort 基數排序 屬於分配式排序 distribution sort 又稱 桶排序 bucket sort 它是通過鍵值的各個位的值,將要排序的元素分配至某些 桶 中,達到排序的作用。2.它和歸併一樣,屬於穩定型演算法。public void radixsort i...

基數排序(桶排序)

思想 先把這組資料的個位排有序,再把十位排有序,再排百位 千位 include include include include void showarr int arr,int len printf n int getmaxnumfin int arr,int len 找陣列中最大數,並求出最大數的...