數(shù)軸是一條直線對嗎 有人說一條直線是一條數(shù)軸對不對為什么
2024-10-07
更新時間:2024-08-26 00:09:03作者:未知
上次給大家講了三分鐘快速記住冒泡排序算法,今天給大家講講選擇排序算法,依然只用三分鐘就可以快速記住,跟著我一起來吧!
給 “6 5 4 3 2 1” 6個數(shù)字增序排序的流程
大體過程:
我們把一串待排序的數(shù)字分為已排序、和待排序的兩類(當然,初始狀態(tài)全都是待排序的)。然后每一趟將待排序中的最小值和待排序中第1個元素交換,此時待排序中第1個元素就能歸到已排序中。將這個流程進行 6 趟就完成了排序。
選擇排序原理:
①、初始時在序列中找到最?。ù螅┰兀诺叫蛄械钠鹗嘉恢米鳛橐雅判蛐蛄?/p>
②、再從剩余未排序元素中繼續(xù)尋找最小(大)元素,放到已排序序列的末尾
?、邸⒁源祟愅?,直到所有元素均排序完畢。
選擇排序與冒泡排序區(qū)別:
選擇排序是在剩下的待排序數(shù)字里面找個最小的再交換;冒泡排序是看見小的就交換。
選擇排序代碼:
#include <cstdio>
/* 交換函數(shù)
* 傳入:待交換兩元素的地址 */
void swap(int *x, int *y) {
int temp = *x;
*x = *y;
*y = temp;
}
/* 增序的選擇排序
* 傳入:待排序數(shù)組a、數(shù)組元素個數(shù)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]);
//輸出結(jié)果:2 3 4 5 15 16 23 88 100
}