七大排序演算法之堆排 選擇

2021-08-24 20:52:18 字數 1471 閱讀 8367

選擇排序

思想:迴圈一次找到乙個最小值(最大值),縮小排序乙個長度

時間複雜度:

平均:o(n^2)

最好:o(n^2)

最壞:o(n^2)

空間複雜度:o(1)

穩定性:不穩定排序

實現**:

public static void selectsort(int arr) 

} }}// 優化版:每迴圈一次找到最大值和最小值

public static void selectsortperfect(int arr)

if (arr[j] > arr[max])

// 在[0, i)是有序的

swap(arr, i, min);

// 在(n-i-1, n)是有序的

swap(arr, max, n - i - 1);

} }}private static void swap(int array, int num1, int num2)

堆排序

思路:1、建堆(在原有陣列上建堆),從小到大排序建大堆

2、每次選擇堆頂元素方法陣列最後,堆數量-1,調整堆(向下調整)

時間複雜度:

平均:o(nlgn)

最好:o(nlgn)

最壞:o(nlgn)

空間複雜度:o(1)

穩定性:不穩定排序

**實現:

public static void heapsort(int array) 

// 1、建堆(大堆)

createheap(array, size);

// 2、刪除堆頂元素,放置陣列最後乙個

for (int i = 0; i < size; ++i)

}private static void createheap(int array, int size)

}// 向下調整

private static void adjustdown(int array, int size, int parent)

maxchild = leftchild;

if (rightchild < size && array[rightchild] > array[leftchild])

if (array[parent] > array[maxchild])

swap(array, parent, maxchild);

adjustdown(array, size, maxchild);

} swap(array, 0, size - 1);

adjustdown(array, size - 1, 0);

}private static void swap(int array, int num1, int num2)

七大排序演算法之選擇排序

和氣泡排序一樣,這個也是簡單而必須掌握的基礎排序演算法。遍歷陣列每個元素,若為公升序,則尋找最小的數與第乙個數交換,一趟排序結束後,最小的數字於陣列第乙個位置,然後在2 n個數中,尋找最小的元素放在第二個位置,往復下去,排序結束。固定 n n public class selectsort syst...

七大排序之選擇排序

剛開始整個陣列是無序區間,在無序區間找到最大的元素,將最大元素放在陣列的最後,第二次在無序區間查詢最大元素,找到最大的,放入陣列的倒數第二個,依此類推 或者是在無序區間找最小元素,將最小元素放在陣列開始,第二次在無序區間找的最小元素放在第二位置,依此類推 最大元素放在最末尾 public void ...

七大排序演算法

氣泡排序 void bubble int a,int n 選擇排序 void select sort int a,int n n為陣列a的元素個數 將第i 小的數,放在第i 個位置 如果剛好,就不用交換 if i min index 插入排序 typedef int elementtype void...