上次給大家講了三分鐘快速記住冒泡排序算法,今天給大家講講選擇排序算法,依然只用三分鐘就可以快速記住,跟著我一起來吧!
上動畫


給 “6 5 4 3 2 1” 6個數字增序排序的流程
大體過程:
我們把一串待排序的數字分為已排序、和待排序的兩類(當然,初始狀態全都是待排序的)。然后每一趟將待排序中的最小值和待排序中第1個元素交換,此時待排序中第1個元素就能歸到已排序中。將這個流程進行 6 趟就完成了排序。
選擇排序原理:
①、初始時在序列中找到最小(大)元素,放到序列的起始位置作為已排序序列
②、再從剩余未排序元素中繼續尋找最?。ù螅┰?,放到已排序序列的末尾
③、以此類推,直到所有元素均排序完畢。
選擇排序與冒泡排序區別:
選擇排序是在剩下的待排序數字里面找個最小的再交換;冒泡排序是看見小的就交換。
選擇排序代碼:
#include <cstdio>
/* 交換函數
* 傳入:待交換兩元素的地址 */
void swap(int *x, int *y) {
int temp = *x;
*x = *y;
*y = temp;
}
/* 增序的選擇排序
* 傳入:待排序數組a、數組元素個數n */
void selectSort(int a[], int n) {
/* 進行n趟操作 */
for(int i = 0; i < n; i++) {
int min_index = i; //記錄待排序部分中最小值的下標
/* 掃描待排序部分,知道到最小值的下標 */
for(int j = i; j < n; j ++) {
if(a[j] < a[min_index])
min_index = j; //時刻更新最小值下標
}
swap(a + i,a + min_index); //交換 當前位 和 待排序部分中最小值
}
}
int main() {
int a[] = {5,2,3,4,15,16,100,23,88};
selectSort(a, 9);
for(int i = 0; i < 9; i++)
printf(“%d “, a[i]);
//輸出結果:2 3 4 5 15 16 23 88 100
}
版權聲明:本文內容由互聯網用戶自發貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發現本站有涉嫌抄襲侵權/違法違規的內容, 請發送郵件至 舉報,一經查實,本站將立刻刪除。