排序詳解 選擇排序與堆排序

2021-09-09 06:16:17 字數 694 閱讀 8201

void selectsort(int* arr, int n)

int tmp = arr[i];

arr[i] = arr[min];

arr[min] = tmp;

}}

將陣列第乙個位置賦值給min(用來記錄最小數的位置)

將arr[min]與後面的元素依次比較直至最後乙個元素,若有比arr[min]小的數則將此位置重新賦給min

此時min記錄著整個陣列最小數的位址。將arr[min]與陣列第乙個元素交換,此時陣列第乙個元素即為最小的數。

以此類推找出次小的元素與陣列第二個元素交換。即完成了排序

堆排序利用了大根堆(或小根堆)堆頂記錄的關鍵字最大(或最小)這一特徵,使得在當前無序區中選取最大(或最小)關鍵字的記錄變得簡單。

void swap(int* a1, int* a2)

void adjustdown(int* arr, int n, int root)

else

}}void heapsortrise(int* arr, int n)

int end = n - 1;

while (end > 0)

}

建大堆(降序建小堆)

將堆頂元素與最後乙個節點元素交換

將除最後乙個節點外的堆看作乙個無序堆。重複1——3

選擇排序與堆排序

選擇排序 依次選擇陣列中的最小值 從小到大 並按順序排放。從第乙個數開始,依次遍歷陣列中的資料,找出最小值,並與第乙個數交換位置 從第二個數開始,依次遍歷 剩餘 陣列中的資料,找出最小值,並與第二個數交換位置 堆排序 堆的概念 在一顆完全二叉樹中,子結點的值總是小於父結點的值 大根堆 或者子結點的值...

選擇排序與堆排序

首先引入一幅圖對七大基於比較的排序演算法進行瀏覽 一 選擇排序 1 思路 每一次從無序區間選出最大 或最小 的乙個元素,存放在無序區間的最後 或最前 直到全部待排序的資料元素排完。2 具體 實現 選擇排序 public static void selectsort int array private...

選擇排序 直接選擇排序與堆排序

選擇排序即每次從待排序的數列中選擇乙個最小的元素,然後把它放在已排好序列的最前面 假定這裡從小到大排序 直至序列完全有序。選擇排序分為線性結構的直接選擇排序與非線性的堆排序,後者是用相當於把樹的元素存在陣列中,通過元素下標來區分孩子結點與父親結點等等 1.直接選擇排序 直接上 void select...