資料結構 直接選擇排序和堆排序

2021-10-19 17:46:28 字數 2307 閱讀 3592

每一次從待排序的資料元素中選出最小(最大)的乙個元素,存放在序列的起始位置,直到全部待排序的資料元素排完。

/*選擇排序:每一次從未排序的資料中找到乙個最小的,

把最小的放到未排序的資料的頭部,不斷重複

*/void

swap

(int

* arr,

int pos1,

int pos2)

void

selectsort

(int

* arr,

int n)

//把最小值存放在最開始的位置

swap

(arr, start, minidx)

;//剩餘的未排序區間[start + 1 , end]

start++;}

}

void

testselectsort()

;int n =

sizeof

(arr)

/sizeof

(arr[0]

);selectsort

(arr, n)

;for

(int i =

0; i < n; i++)}

intmain()

每次選最大值和最小值,同時進行比較

#include

#include

void

selectsort2

(int

* arr,

int n)

swap

(arr, start, minidx)

;//判斷最大值是否為start

if(maxidx == start)

maxidx = minidx;

swap

(arr, end, maxidx)

; start++

; end--;}

}void

testselectsort2()

;int n =

sizeof

(arr)

/sizeof

(arr[0]

);selectsort2

(arr, n)

;for

(int i =

0; i < n; i++)}

intmain()

堆排序是指利用堆這種資料結構所設計的一種排序演算法,它是選擇排序的一種。它是通過堆來進行選擇資料。

需要注意的是排公升序要建大堆,排降序建小堆。

/*實現陣列中兩個位置值的交換*/

void

swap

(hpdatatype* arr,

int idx1,

int idx2)

/*實現大根堆

向下調整演算法,傳入儲存堆的陣列及長度,需要執行向下調整的節點序號

*/void

bigshifdown

(hpdatatype* arr,

int n,

int cur)

else

break;}

}//堆排序

void

heapsort

(int

* arr,

int n)

//堆排序

int end = n -1;

while

(end >0)

}

void

testheapsort()

;int n =

sizeof

(arr)

/sizeof

(arr[0]

);heapsort

(arr, n)

;for

(int i =

0; i < n; i++)}

intmain()

資料結構 選擇排序(直接選擇 堆排序)

1 選擇排序的基本思想 每一次從待排序的資料元素中選出最小 或最大 的乙個元素,存放在序列的起始位置 或末尾 直到全部待排序的資料元素排完。選擇排序可分為直接選擇排序 堆排序。2 直接選擇排序 2.1 演算法步驟 1.在元素集合array i array n 1 中選擇關鍵碼最大 小 的資料元素 2...

選擇排序 直接選擇排序和堆排序

選擇排序 基本思想是依次從待排序中選擇出關鍵字值最小的記錄 關鍵字值次之的記錄 並分別將它們定位到序列左側的第乙個位置 第二個位置 從而使待排序的記錄序列成為按關鍵字值由小到大排列的有序序列。直接選擇排序 從第i個無序列表arr i.n 中,選擇關鍵字值最小的記錄將其插入有序列表的末尾arr n i...

直接選擇排序和堆排序

直接選擇排序 每次遍歷選擇最小的數依次放在第一 二 三 位置 public static void select arr if small i 堆排序 思路構建乙個大頂堆,然後把根節點值和末尾節點交換,末尾就是最大值了,然後再將除尾節點外的n 1個元素構建為大頂堆,重複上述操作 public sta...