排序
優(yōu)酷:舞動(dòng)的排序
(魔性的舞蹈帶你感受排序的魅力)
6244{AOFOPP[F@TB]TWOFKY.png
下面簡(jiǎn)單介紹一下常用的排序方法
插入排序
int main(){
int num[10] = {3,0,1,8,7,2,5,4,9,6};
for(int i = 0; i < 10-1; i++){
//判斷i和i+1的大小
if(num[i] > num[i+1]){
//換位置
int temp = num[i];
num[i] = num[i+1];
num[i+1] = temp;
//讓i對(duì)應(yīng)的值和前面所有的值進(jìn)行比較
for (int j = i; j > 0; j--){
//j和j-1進(jìn)行比較
if(num[j] > num[j-1]){
//當(dāng)前這個(gè)位置就是這個(gè)數(shù)字的位置
break;
} else{
//j和j-1換位置
int temp = num[j];
num[j] = num[j-1];
num[j-1] = temp;
}
}
}
}
for(int i = 0; i < 10; i++){
printf("%d ", num[i]);
}
return 0;
}
選擇排序
每次外層循環(huán)控制遍歷多少次(n-1)
內(nèi)層循環(huán)遍歷出當(dāng)前最小的數(shù)
int main(){
//選擇排序
int num[10] = {3,0,1,8,7,2,5,4,9,6};
for(int i = 0; i < 10-1; i++){//控制次數(shù)
//取出i對(duì)應(yīng)的數(shù),默認(rèn)是最小的數(shù)
int temp = num[i];
//從i后面開(kāi)始查找當(dāng)前最小的數(shù) 放到i的位置
for(int j = i+1; j < 10; j++){
//讓temp和i后面的每個(gè)數(shù)進(jìn)行比較
//temp始終保存最小的那個(gè)數(shù)
if(num[j] < temp){
//交換
int n = temp;
temp = num[j];
num[j] = n;
}
}
//當(dāng)前的temp值是最小的捕捂,寫入i對(duì)應(yīng)的位置
num[i] = temp;
}
//輸出
for(int i = 0; i < 10; i++){
printf("%d ", num[i]);
}
return 0;
}
冒泡排序
實(shí)現(xiàn)方式 每次遍歷整個(gè)數(shù)組 找到最大的數(shù) 沉底
如果數(shù)組有n個(gè)元素
第一次需要遍歷n-1次
第二次需要遍歷n-2次
...
總共需要比較n-1次
代碼如何實(shí)現(xiàn)
兩層循環(huán)
第一層控制總共遍歷多少次
例如:5 0 4 7 9 8 6 3 1 2
10個(gè)元素只需遍歷10-1次就能拍好序
第二層控制每次循環(huán)需要遍歷多少次才能找到最大值
每次從頭開(kāi)始i=0 讓i和i+1比較 確保i+1是最大的
int main(){
int num[10] = {3,0,1,8,7,2,5,4,9,6};
for(int i = 1; i < 10; i++){//控制總共遍歷次數(shù)
//開(kāi)始每一次遍歷 找到一個(gè)最大的數(shù)沉底
for(int j = 0; j < 10-i; j++){
//讓j和j+1的值進(jìn)行比較
if(num[j] > num[j+1]){
//交換j和j+1的值
int temp = num[j];
num[j] = num[j+1];
num[j+1] = temp;
}
}
}
for(int i = 0; i < 10; i++){
printf("%d ", num[i]);
}
return 0;
}
小提示
程序里面盡量做到循環(huán)層級(jí)不多于兩個(gè)
界面層級(jí) 主頁(yè)>>詳情>>
三類循環(huán)
1.一個(gè)循環(huán) :一次遍歷就結(jié)束
2.兩個(gè)循環(huán) :每一次內(nèi)部又有遍歷
3.多個(gè)循環(huán)