Java七武器----排序算法之基數排序

最近在學習排序算法一直在思考一件事情就是知其然與知其所以然,因爲算法可以通過記憶記住寫法,我們根本無需瞭解爲什麼只需記住其形還有結果進行運用就OK了,那麼在學習的過程中我們還有必要知道其實現原理知其所以然嗎?爲此我在知乎提了兩個相關的問題,歡迎大家積極討論。(https://www.zhihu.com/question/312122688,https://www.zhihu.com/question/312097858)

基數排序

基數排序的實現原理

基數排序有別於其他排序,他是一種全新的排序方式,但對這種排序方式的理解一樣需要我之前提到的宏觀-微觀思想,基數排序從排序過程來看主要就是:1. 個位排序,十位排序,百位排序。。。2. 賦值從小到大,取值一樣從小到大。3. 本位排序只是將低於本位的數排序同時爲高位排序做準備,對於高於本位的數據沒有實際意義(簡言之基數排序的關鍵就是各個位數的拆分對比)。

代碼實現

public class ArithmeticUtil{
	public static int[] radixSort(int[] a,int n){
		int length=n;
		int divisor=1;
		//二維數組確定行列
		int[][]bucket=new int[10][length];
		//單列的個數默認值爲0
		int[] count=new int[10];
		//位數的具體值
		int digit;
		//for循環的次數代表比較數列中的最高位4代表的是百位
		for(int i=1;i<4;i++){
			for(int temp:a){
				digit=(temp/divisor)%10;
				bucket[digit][count[digit]++]=temp;
			}
			int k=0;
			for(int j=0;j<10;j++){
				if(count[j]==0){
					coutinue;
				}
				for(int w=0;w<count[j];w++){
					a[k++]=bucket[j][w];
				}
				//將表示同位數相等出現的次數置零方便更高位計數
				count[j]=0;
			}
			
			divisor*=10;
		}
		return a;


	}





}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章