java排序演算法(八)------桶式排序
桶式排序
實現程式碼:
/**
*桶式排序:有限個數字m,每個數字的大小都在1與n之間
*,則我們可以假設有n個桶,遍歷m個數字,將其存入對應的桶中
*(如數字的值為3,就存入3號桶,桶的值對應存入數字的個數)
*/
public class BucketSort {
public static void sort(int[] arr){
//求得最大值
int max = arr[0];
for(int i = 0;i < arr.length;i ++){
if(max < arr[i]){
max = arr[i];
}
}
//建立桶
int [] count = new int[max+1];
for(int i = 0;i < arr.length;i ++){
count[arr[i]] ++;
}
//倒出桶
for(int i = 0,j = 0;i <= max;i ++){
if(count[i] != 0){
arr[j++] = i;
}
}
}
}
相關推薦
java排序演算法(八)------桶式排序
桶式排序 實現程式碼: /** *桶式排序:有限個數字m,每個數字的大小都在1與n之間 *,則我們可以假設有n個桶,遍歷m個數字,將其存入對應的桶中 *(如數字的值為3,就存入3號桶,桶的值對應存入數字的個數) */ public class Bucke
Java排序演算法(十)--桶排序
前面的1~8介紹的都是基礎的排序的演算法,現在來介紹一種高效的排序演算法–桶排序。 桶排序的原理是:將陣列分到有限數量的桶子裡。每個桶子再個別排序(有可能再使用別的排序演算法或是以遞迴方式繼續使用桶排序進行排序)。桶排序是鴿巢排序的一種歸納結果。當要被排序的陣
排序演算法(八)迭代歸併排序的理解與實現
基本概念 歸併排序大量引用了遞迴,儘管在程式碼上比較清晰,容易理解,但這會造成時間和空間上的效能損耗 排序追求的就是效率,可以講遞迴轉化成迭代,改動後效能上就得到了進一步的提高。非遞迴的迭代方法避免了遞迴時深度為log2(n)的棧空間,空間知識用到申請歸併臨時用到的TR陣
java排序演算法(四)------希爾排序
希爾排序 希爾排序也是一種插入排序,它是簡單插入排序經過改進之後的一個更高效的版本,也稱為縮小增量排序,同時該演算法是衝破O(n2)的第一批演算法之一。 程式碼實現: /** *希爾排序的誕生是由於插入排序在處理大規模陣列的時候會遇到需要移動太多元素的問
經典排序演算法(二)--桶排序Bucket Sort
補充說明三點 1,桶排序是穩定的 2,桶排序是常見排序裡最快的一種,比快排還要快…大多數情況下 3,桶排序非常快,但是同時也非常耗空間,基本上是最耗空間的一種排序演算法 我自己的理解哈,可能與網上說的有一些出入,大體都是同樣的原理 無序陣列有個要求,就是成員隸屬於固定(有限的)的區間,如範圍為[0-
排序演算法(4)- 桶排序(Bucket Sort)
原理 準備m個箱子(m為待排序陣列的最大值+1),依次在下標為元素大小的箱子上做標記。最後根據有標記的箱子的下標和標記數量,從小到大放入陣列中,得到排序完成的陣列。 注意點 適合大數
Python實現八大排序演算法(轉載)+ 桶排序(原創)
插入排序 核心思想 程式碼實現 希爾排序 核心思想 程式碼實現 氣泡排序 核心思想 程式碼實現 快速排序 核心思想 程式碼實現 堆排序 核心思想 程式碼實現 歸併排序 核心思想 程式碼實現 基數排序 核心思想 程式碼實現 桶排
排序演算法(八)——基數排序
基數排序(radix sort)屬於“分配式排序”(distribution sort),又稱“桶子法”(bucket sort)或bin sort,顧名思義,它是透過鍵值的部份資訊,將要排序的元素分配至某些“桶”中,藉以達到排序的作用,基數排序法是屬於穩定性的排序。 基數排序適用於大小數字都有
排序演算法(三):計數排序與桶排序
插入排序、堆排序、歸併排序等排序方法,在排序的最終結果中,各個元素的次序依賴於他們之間的比較,我們把這一類的排序演算法稱為比較排序。在最壞情況下,任何比較排序演算法都要經過 Omega(nlgn)次比較。因此堆排序和歸併排序都是漸近最優的比較排序演算法。
經典排序演算法(4)——折半插入排序演算法詳解
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
排序演算法(3)--直接插入排序InsertSort
介紹: 插入排序的工作原理是,對於每個未排序資料,在已排序序列中從後向前掃描,找到相應位置並插入。 越有序越快 步驟: 1.從第一個元素開始,該元素可以認為已經被排序 2.取出下一個元素,在已經排序的元素序列中從後向前掃描 3.如果被掃描的元素(已排序)大於新元
排序演算法(四)、選擇排序 —— 簡單選擇排序 和 堆排序
1、簡單選擇排序簡單選擇排序思想是:從頭到尾(從後往前也行)遍歷序列,先固定第一個位置的資料,將該位置後面的資料,依次和這個位置的資料進行比較,如果比固定位置的資料大,就交換。這樣,進行一趟排序以後,第一個位置就是最小的數了。然後重複進行,第 2 次遍歷並且比較後,第二個位置
排序演算法(六)、歸併排序
1、二路歸併排序“歸併”即“合併”,是指將兩個或者兩個以上有序表組合成一個有序表。假如待排序表含有 n 個記錄,即可以視為 n 個有序的子表。每個子表長度為1,然後兩兩歸併,得到 n/2 個長度為 2 或者 1 的有序表,然後,再兩兩歸併,。。。。如此重複,直到合併成一個長度
經典排序演算法(6)——直接選擇排序演算法詳解
直接選擇排序(Straight Select Sort)是一種典型的選擇排序演算法,通過不斷選擇序列中最大(小)的元素。 一、演算法基本思想 (1)基本思想 直接選擇排序的基本思想就
資料結構之排序演算法(五)-直接插入排序,希爾排序,直接選擇排序
直接插入排序:時間複雜度:O(n^2) 基本演算法思路是:把後面待排序的記錄按其關鍵字的大小逐個插入到一個已經排好序的有序序列中,直到所有記錄插完為止,得到一個新的有序序列。(無序插入前面有序) 演算
排序演算法(五)、堆排序 —— 合併果子
2004年NOIP全國聯賽普及組 題目描述: 在一個果園裡,多多已經將所有的果子打了下來,而且按果子的不同種類分成了不同的堆。多多決定把所有的果子合成一堆。 每一次合併,多多可以把兩堆果子合併到一起,消耗的體力等於兩堆果子的重量之和。可以看出,所有的果子經過n-1次合併之後,
排序演算法(1):氣泡排序和插入排序
1.1 氣泡排序 氣泡排序需要多次遍歷列表。它比較相鄰的項並交換那些無序的項。每次遍歷列表將下一個最大的值放在其正確的位置。實質上,每個項“冒泡”到它所屬的位置。 用python寫交換操作時,與大多數程式語言略有不同(需要臨時儲存位置),python可以執行
圖解排序演算法(五)之快速排序
選取一個樞紐,使它左邊的值都比它小,右邊的值比它大。(假定選陣列第一個元素值) int Partition(int* array, int low, int high) { int pivotkey; pivotkey = array[low];
排序演算法(5)- 折半插入排序(Binary Insertion Sort)
原理 插入排序演算法的優化演算法 排序演算法是和已排序佇列按順序一一比較,然後交換位置,直到找出插入位置。折半插入排序演算法是先適用折半查詢找出插入位置,然後統一後移。 注意點 時間複
排序演算法(六)非比較排序----計數排序和基數排序
前邊的幾篇文章介紹的幾種排序演算法都是比較排序,接下來的文章將會介紹兩種非比較排序。 計數排序: 計數排序通過雜湊的方法將一組資料對映到一個數組裡,最後將陣列中的數依次讀取,並寫進原來的陣列,讀出的資