數(shù)軸是一條直線對(duì)嗎 有人說(shuō)一條直線是一條數(shù)軸對(duì)不對(duì)為什么
2024-10-07
更新時(shí)間:2024-08-26 00:09:03作者:未知
上次給大家講了三分鐘快速記住冒泡排序算法,今天給大家講講選擇排序算法,依然只用三分鐘就可以快速記住,跟著我一起來(lái)吧!
給 “6 5 4 3 2 1” 6個(gè)數(shù)字增序排序的流程
大體過(guò)程:
我們把一串待排序的數(shù)字分為已排序、和待排序的兩類(當(dāng)然,初始狀態(tài)全都是待排序的)。然后每一趟將待排序中的最小值和待排序中第1個(gè)元素交換,此時(shí)待排序中第1個(gè)元素就能歸到已排序中。將這個(gè)流程進(jìn)行 6 趟就完成了排序。
選擇排序原理:
①、初始時(shí)在序列中找到最小(大)元素,放到序列的起始位置作為已排序序列
②、再?gòu)氖S辔磁判蛟刂欣^續(xù)尋找最?。ù螅┰兀诺揭雅判蛐蛄械哪┪?/p>
?、邸⒁源祟愅?,直到所有元素均排序完畢。
選擇排序與冒泡排序區(qū)別:
選擇排序是在剩下的待排序數(shù)字里面找個(gè)最小的再交換;冒泡排序是看見(jiàn)小的就交換。
選擇排序代碼:
#include <cstdio>
/* 交換函數(shù)
* 傳入:待交換兩元素的地址 */
void swap(int *x, int *y) {
int temp = *x;
*x = *y;
*y = temp;
}
/* 增序的選擇排序
* 傳入:待排序數(shù)組a、數(shù)組元素個(gè)數(shù)n */
void selectSort(int a[], int n) {
/* 進(jìn)行n趟操作 */
for(int i = 0; i < n; i++) {
int min_index = i; //記錄待排序部分中最小值的下標(biāo)
/* 掃描待排序部分,知道到最小值的下標(biāo) */
for(int j = i; j < n; j ++) {
if(a[j] < a[min_index])
min_index = j; //時(shí)刻更新最小值下標(biāo)
}
swap(a + i,a + min_index); //交換 當(dāng)前位 和 待排序部分中最小值
}
}
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
}