方法一:每個桶只放相同的數字
入桶過程:
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 找陣列中最大數,並求出最大數的...