資料結構和演算法 排序演算法(下)

2021-10-02 20:27:21 字數 3375 閱讀 5440

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...