選擇排序與堆排序

2021-09-29 19:26:39 字數 818 閱讀 2958

首先引入一幅圖對七大基於比較的排序演算法進行瀏覽: 

一、選擇排序

1、思路:每一次從無序區間選出最大(或最小)的乙個元素,存放在無序區間的最後(或最前),直到全部待排序的資料元素排完。 

2、具體**實現:

//選擇排序

public static void selectsort(int array)

}private static void shiftdown(int array,int size,int index)

//if結束後,child指向左右子樹的最大值

if(array[child] > array[parent]) else

parent = child;

child = 2*parent+1; }}

private static void swap(int array,int x,int y)

3、效能分析:堆排序是不穩定的排序。假設我們有n個資料,那麼就需要n-1次建堆,每次建堆的時間複雜度為log(n),無論最開始的序列是什麼樣子,都需要對堆進行遍歷( o(n) )找到最大值,所以最好最壞的情況下時間複雜度都是o(n*log(n))。

選擇排序與堆排序

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

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

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

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

void selectsort int arr,int n int tmp arr i arr i arr min arr min tmp 將陣列第乙個位置賦值給min 用來記錄最小數的位置 將arr min 與後面的元素依次比較直至最後乙個元素,若有比arr min 小的數則將此位置重新賦給min...