選擇排序
思想:迴圈一次找到乙個最小值(最大值),縮小排序乙個長度。
時間複雜度:
平均: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...