主要內(nèi)容
冒泡排序?選擇排序?插入排序
主要的技術(shù)
for的兩層循環(huán)體? 兩個(gè)數(shù)組元素實(shí)現(xiàn)交換
冒泡排序
實(shí)現(xiàn)方式:每次遍歷整個(gè)數(shù)組,找到最大的一個(gè)沉底
若數(shù)組有N個(gè)元素,
第一次需要遍歷N-1次,
第二次需要遍歷N-2次,
……
總共需要比較N-1次
代碼如何實(shí)現(xiàn)
兩層循環(huán):
(1)、第一層循環(huán)控制需要遍歷多少次
e.g3 0 1 8 7 25 4 9 6共10個(gè)元素,只需要遍歷(10-1)次
(2)、第二層循環(huán)控制每次需要遍歷多少次才能找到最大(內(nèi)層循環(huán))
每次從i=0開始,讓i和i+1進(jìn)行比較,確保i+1是最大的
注:(一般來(lái)說(shuō),程序里盡量做到循環(huán)層小于等于2層)
| 一個(gè)循環(huán) | 兩個(gè)循環(huán) |
|---|---|
| 一次遍歷就結(jié)束 | 每一次內(nèi)部又有遍歷 |
冒泡排序代碼
#include <stdio.h>
int main(){
int num[10] = {3,0,1,8,7,2,5,4,9,6};
for(int i = 0; i < 10-1; i++){//第一層循環(huán)控制總共便利的次數(shù)
for(int j = 0; j < 10 - i; j++){//第二層循環(huán) 開始每一次遍歷,找到一個(gè)最大的數(shù)沉底
//讓j和j+1進(jìn)行比較
if(num[j] > num[j+1]){
//交換數(shù)組元素的值
int temp = num[j];
num[j] = num[j+1];
num[j+1] = temp;
}
}
}
//輸出按從小到大排序的數(shù)組元素
for(int i = 0; i < 10; i++){
printf("%d ",num[i]);
}
return 0;
}

選擇排序
實(shí)現(xiàn)方式
取出數(shù)組元素num[i]所對(duì)應(yīng)的的值,默認(rèn)為最小的,利用temp保存最小的元素,讓temp和num[i]后面的每個(gè)數(shù)進(jìn)行比較,temp始終保存最小的那個(gè)數(shù)
代碼如何實(shí)現(xiàn)
兩層循環(huán):
(1)、第一層循環(huán)控制總共需要遍歷多少次
e.g3 0 1 8 7 2 5 4 9 6共10個(gè)元素,只需要遍歷(10-1)次
(2)、第二層循環(huán)遍歷出當(dāng)前最小的數(shù)
選擇排序代碼
#include <stdio.h>
int main(){
int num[10] = {3,0,1,8,7,2,5,4,9,6};
for(int i = 0; i < 10-1; i++){
int temp = num[i];//取出i對(duì)應(yīng)的值,默認(rèn)是最小的數(shù)
for(int j = i+1; j < 10; j++){
if(temp > num[j]){
int n = temp;
temp = num[j];
num[j] = n;
}
}
num[i] = temp;
}
for(int i = 0; i < 10; i++){
printf("%d",num[i]);
}
return 0;
}

插入排序
實(shí)現(xiàn)方式
首先讓num[i]和num[i+1]進(jìn)行大小比較,數(shù)值小的往前移,再讓num[i]和前面所有的元素進(jìn)行比較,將最小的值置于最前面
代碼如何實(shí)現(xiàn)
兩層循環(huán):
(1)、第一層循環(huán)控制總共需要遍歷多少次
e.g3 0 1 8 7 2 5 4 9 6共10個(gè)元素,只需要遍歷(10-1)次
(2)、第二層循環(huán)實(shí)現(xiàn)數(shù)組元素與之前的元素進(jìn)行比較大小,最小的元素在最前
插入排序代碼
#include <stdio.h>
int main(){
int num[10] = {3,0,1,8,7,2,5,4,9,6};
for(int i = 0; i < 10-1; i++){
if(num[i] > num[i+1]){
int temp = num[i];
num[i] = num[i+1];
num[i+1] = temp;
}
for(int j = i; j > 0; j--){
if(num[j] > num[j-1]){
break;
}else{
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;
}
