每一次從待排序的資料元素中選出最小(最大)的乙個元素,存放在序列的起始位置,直到全部待排序的資料元素排完。
/*選擇排序:每一次從未排序的資料中找到乙個最小的,
把最小的放到未排序的資料的頭部,不斷重複
*/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...