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