1.1演算法描述
其基本思想就是:
第一步,在待排序的記錄關鍵字a[1]——a[n]中選擇最小(最大)記錄,將它與a[1]交換;
第二步,在剩下的a[2]——a[n]中選擇最小(最大)的記錄,將它與a[2]交換;
第三步:以此類推,即可得出從小至大(從大至小)的數列。
1.2舉例理解
初始數列:10 50 30 60 70 201.3**實現第一趟:選擇數列中最小的數,即10,10在a[1]上,因此不需要交換,即:10 50 30 60 70 20
第二趟:從剩下的數中選擇最小的數,即20,將20與a[2]交換,即:10 20 30 60 70 50
以此類推,得出序列為:10 20 30 50 60 70
#include
intselectsort
(int a,
int n)}if
(min!=i)}}
intmain()
;printf
("排序前的數列:");
for(i=
0;i<
6;i++
)selectsort
(a,6);
printf
("排序後的數列:");
for(i=
0;i<
6;i++
)return0;
}
堆排序是指利用堆這種資料結構所設計的一種排序演算法。堆積是乙個近似完全二叉樹的結構,並同時滿足堆積的性質:即子結點的鍵值或索引總是小於(或者大於)它的父節點。
2.1演算法描述
第一步:將無序序列構建成乙個堆,自行選擇大頂堆或小頂堆;
第二步:將堆頂元素與末尾元素交換,將最大元素放到陣列末端;
第三步:重複執行第
一、二步,直到整個序列有序。
2.2舉例理解
(以大頂堆為例)
設初始無序序列為:2 6 8 3 7 9 5構造大頂堆為:對應的堆為:
26 8
3 7 9 5
9重新調整結構為:7 83 6 2 5
即現在序列為:9 7 8 3 6 2 5
將堆頂元素與末尾元素交換,使末尾元素最大,則序列為:5 7 8 3 6 29(此時9為確定序列,此後只對剩下元素排序)
8重複上述步驟:7 53 6 29
堆頂元素與末尾元素交換,即現在序列為:2 7 5 3 68 9(此時8和9 都已確定)
最終排序為:2 3 5 6 7 8 92.3**實現2
3 56 7 8 9
#include
int a=
,n=7
;void
exchange
(int i,
int n)
void
heapsort
(int n)
else
printf
("%d %d\n"
,a[1
],a[0]
);return;}
for(i=n/2-
1;i>=
0;i--
) s=a[0]
; a[0]
=a[n-1]
; a[n-1]
=s;printf
("%d "
,a[n-1]
);heapsort
(n-1);
}int
main()
演算法3 排序 簡單選擇排序
基本思想 在要排序的一組數中,選出最小的乙個數與第乙個位置的數交換 然後在剩下的數當中再找最小的與第二個位置的數交換,如此迴圈到倒數第二個數和最後乙個數比較為止。選擇排序的思想其實和氣泡排序有點類似,都是在一次排序後把最小的元素放到最前面。但是過程不同,氣泡排序是通過相鄰的比較和交換。而選擇排序是通...
簡單選擇排序演算法
include include include 排序用到的結構和函式 define maxsize 20 typedef struct sqlist 交換l中陣列r的下標為i和j的值 void swap sqlist l,int i,int j 簡單選擇排序 void selectsort sqli...
簡單選擇排序演算法
簡單選擇排序思想 首先,找到陣列中最小的元素,其次,將它和陣列第乙個元素交換位置 再次,在剩下的元素中找到最小的元素,將它與陣列中的第二個元素交換。如此亡故,直到將整個陣列排序。這種方法叫做選擇排序,因為它在不斷地選擇剩餘元素之中的最小者。先說看每步的狀態變化,後邊介紹細節,現有無序陣列 6 2 4...