1、基數排序:又稱桶子排序,它是通過鍵值的各個位的值,
將要排序的元素fenp
至某些「桶」中
,達到排序的作用。
基數排序法是屬於穩定性的排
序,基數排序法
的是效率高的
穩定性排序法。基數排序是使用空間換時間的經典演算法。
2、基排序基本思想:將所有待排序數補全成統一長度的數,數字短的前面用0補齊,然後從低位開始,依次排序,最後就會得到乙個有序序列。
下面畫一張圖,讓大家更直觀得看到基數排序是怎麼實現的。
下面我們**實現一波:
public class radixsort ;
radixsort(arr);
}public static void radixsort(int arr)
}//測試找出最大值是否正確
// system.out.println("max= "+ max);
//2、計算出最大數的位數
int maxlength = (max + "").length();
//3、建立十個桶,用二維陣列表示,
int bucket = new int[10][arr.length];
//4、定義乙個一維陣列,存放每個桶中每次放入的資料
int bucketelems = new int[10];
//5、將無序序列中的元素依次拿出,依次計算出個位,十位,百位的數,依次放入對應的桶中
for (int i = 0 ,n =1; i 1、歸併排序:歸
並排序是利用
歸併的思想實現的排序方法,該排序演算法採用經典的
分治策略。將問題
分成一些小的問題然後遞迴求解,然後將
分的階段得到的各答案"修補
"在一起完成排序。
下面畫一張圖帶你理解歸併思想:
**演示:
public class test5 ;
int temp = new int[arr.length];
mergesort(arr, 0, arr.length - 1, temp);
system.out.println(arrays.tostring(arr));
}//編寫分階段的方法
public static void mergesort(int arr, int left, int right, int temp)
}//編寫合階段的方法
/*** @param arr 待排序陣列
* @param left 左邊有序序列索引
* @param right 右邊有序序列索引
* @param temp 中轉陣列
*/public static void merge(int arr, int left, int right, int mid, int temp) else
}//把剩餘的數依次加入temp陣列
while (i <= mid)
while (j <= right)
system.out.println("排序之後的結果為" + arrays.tostring(temp));
//3.把temp陣列的元素拷貝到temp
t = 0;
int templeft = left;
system.out.println("templeft" + templeft + " " + "right" + right);
while (templeft <= right) }}
1、希爾排序:希爾排序也是一種插入排序,它是簡單插入排序經過改進之後的乙個更高效的版本
,也稱為
縮小增量排序。
2、希爾排序思想:希
1時,整個陣列恰被分成一組,演算法便終止。
public class shellsort ;
shellsort(arr);
}//整合希爾排序
public static void shellsort(int arr) }}
system.out.println("希爾排序第" + (++count) + "次:" + arrays.tostring(arr));}}
1、堆排序:堆排序是利用
堆這種資料結構而設計的一種排序演算法,堆排序是一種
選擇排序,
它的最壞,最好,平均時間複雜度均為
o(nlogn
),它也是不穩定排序。
2、堆:堆是具有以下性質的完全二叉樹:每個結點的值都大於或等於其左右孩子結點的值,稱為大頂
堆。每個結點的值都小於或等於其左右孩子結點的值,稱為小頂堆。一般
公升序採用大頂堆
,降序採用小頂堆 。
3、堆排序思想:將待排序的數列先構成乙個大頂堆或者小頂堆,此時二叉樹的的根節點是整個數列的最大值/最小值,將根節點和二叉樹末尾節點進行交換,重複對剩餘節點構造大頂堆/小頂堆就可以得到乙個有序序列。
4、注意:堆排序中沒有構建二叉樹,而是以循序儲存二叉樹的方式來完成堆陣列的操作。
public class heapsort ;
heapsort(arr);
}//堆排序方法:
public static void heapsort(int arr)
//2、將堆頂元素與末尾元素交換,將最大元素「沉」到陣列末端
for (int j = arr.length - 1; j > 0; j--)
system.out.println(arrays.tostring(arr));
}//將乙個陣列(二叉樹)調整成乙個大頂堆
/*** @param i : 表示非葉子節點在陣列中的索引
* @param length : 表示對多少個元素繼續進行調整,length逐漸減少
*/public static void adjustheap(int arr, int i, int length)
if (arr[k] > temp) else
//for迴圈結束後,我們已經將以i為父結點的樹的最大值放在了最頂部
arr[i] = temp;//把temp值放到調整後的位置}}
}
資料結構和演算法 排序演算法 希爾排序
希爾排序 希爾排序 希爾排序就是插入排序的一種改進版本,演算法的步驟 把乙個序列不視為乙個整體,而是視為多個子串行,假設間隔是gap 4 alist 54,26,93,17,77,31,44,55,20 54,26,93,17,77,31,44,55,20 54 77 20 這是1 組,間隔是4,2...
資料結構和演算法 排序演算法 氣泡排序
排序演算法 排序演算法,我們想要把線性表中的無序序列,排成有序序列,的演算法,就是排序演算法,排序演算法的穩定性 舉例 假設對下面的元組要以他們的第乙個數字來排序。4,1 3,1 3,7 5,6 如果你排序之後,3,1 3,7 和原來的順序一樣,就是穩定的,否則就是不穩定的,3,1 3,7 4,1 ...
資料結構和演算法 排序
一 簡單排序 1.氣泡排序o n 2 兩兩比較,反序交換 public static int bubblesort int arr return arr 2.選擇排序o n 2 public static int selectsort int arr if i minindex return arr...