排序: 冒泡排序
插入排序
選擇排序
快速排序
優(yōu)酷搜索 :舞動的排序
排序?qū)崿F(xiàn)方式:(程序里面盡量做到循環(huán)層級少于等于兩個(gè) )
一個(gè)循環(huán):一次遍歷就結(jié)束
兩個(gè)循環(huán):每一次內(nèi)部又有循環(huán)
冒泡排序?qū)崿F(xiàn)方式:每次遍歷整個(gè)數(shù)組坛掠,找到最大的一個(gè)數(shù)沉底
如果數(shù)組有N個(gè)元素
第一次需要遍歷N-1次(沉第一個(gè)數(shù)據(jù))
第二次需要遍歷N-2次 (沉第二個(gè)數(shù)據(jù))
第三次需要遍歷N-3次(沉第三個(gè)數(shù)據(jù))
盾剩。拦耐。。
總共需要比較N-1次
代碼如何實(shí)現(xiàn)
兩層循環(huán):第一層循環(huán)控制總共需要遍歷多少次
3 0 1 8 7 2 5 4 9 6
10個(gè)元素只需要遍歷10-1次就能排好序
第二層循環(huán)控制每次遍歷需要遍歷多少次才能找到最大值
每次從頭i = 0開始,讓i和i+1進(jìn)行比較明刷,確保i+1是最大的
選擇排序:外層循環(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 = 1; i < 10; i++){//控制總共遍歷次數(shù)
//開始每一次遍歷 找到一個(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;
}
//選擇排序
int num[10] = {3,0,1,8,7,2,5,4,9,6};
for(int i = 0; i < 10-1; i++){//控制次數(shù)
//取出i對應(yīng)的數(shù),默認(rèn)是最小的數(shù)
int temp = num[i];
//從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對應(yīng)的位置
num[i] = temp;
}
//輸出
for(int i = 0; i < 10; i++){
printf("%d ", num[i]);
}
return 0;
}
//插入排序
int num[10] = {3,0,1,8,7,2,5,4,9,6};
for(int i = 0; i < 10-1; i++){//控制次數(shù)
//判斷i和i+1的大小
if(num[i] > num[i+1]){
//換位置
int temp = num[i];
num[i] = num[i+1];
num[i+1] = temp;
//讓i對應(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;
}