選擇排序演算法-----堆排序:
堆排序的結構思想就是:先構建(例如大頂堆)然後調整。構建堆,在構建過程中,用到3個變數,root,last,child,其中有兩步:比較左右孩子大小,然後將大的值與root比較並且(是否)交換位置。另外,構建完成之後,接著迴圈將最後乙個元素與第乙個元素交換位置,然後接著從第乙個元素開始,進行調整。
觀察下圖,數字原始排列為 5,7,3,2,4,8,11,6,1根據上述思想,自行變化。
**如下:
#
include
void
adjustheap
(int
*a,int root,
int last)
// 交換調整函式
if(a[root]
)//下標root位置的元素與最大值進行交換。 }}
void
swap
(int
*a,int
*b)void
heapsort
(int
*a,int length)
//迴圈交換根節點與最後葉子節點i的元素值
for(i = length-
1; i>
0; i--
)//每進行一次大根堆的調整就把根節點的值與最後相應的乙個節點的值進行交換。
}int
main()
;int length =
sizeof
(arry)
/sizeof
(int);
printf
("排序前: ");
for(
int i=
0; i
)heapsort
(arry, length)
;printf
("\n排序後: ");
for(
int i=
0; i
)return0;
}
程式執行結果: 排序演算法之選擇排序 選擇排序 堆排序
直接選擇排序 如下 下面 是一次迴圈同時挑選出最大和最小數,並將其與左右交換 選擇排序 void selectionsort int a,int len swap a min a left 如果最大數的下標在為left,證明要交換的最大數已經被 換到min小標所表示的位置,只需要將right和min...
排序演算法(2) 選擇排序 堆排序
繼續上篇的 交換排序 氣泡排序 快速排序,本篇介紹選擇排序和堆排序 一 選擇排序 非常的簡單直觀,每次找出最小或者最大的值儲存起來,繼續找剩下的值儲存起來,直達最後乙個元素。從arr 0 arr n 中找出最小的值,放在arr 0 此時arr 0 已經排好序 從arr 1 arr n 中找出最小的值...
排序演算法 之選擇排序(直接選擇排序,堆排序)
一 排序演算法分為 1.插入排序 直接插入排序 希爾排序 2.選擇排序 直接選擇排序 堆排序 3.交換排序 氣泡排序 快速排序 4.歸併排序 二,選擇排序 直接選擇排序 1.演算法 選擇排序 直接選擇排序 void selectsort int a,size t n if a child a par...