C語(yǔ)言入門到進(jìn)階(排序)----Day6 29th/Nov./2019

主要內(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;
}
運(yùn)行結(jié)果

選擇排序

實(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;
}

運(yùn)行結(jié)果

插入排序

實(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;
}
運(yùn)行結(jié)果
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容