欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言中的冒泡排序問題

 更新時間:2022年12月27日 09:01:24   作者:我的博爾赫斯  
這篇文章主要介紹了C語言中的冒泡排序問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

冒泡排序的原理

冒泡排序的步驟

假設(shè)我們現(xiàn)在有一個無序數(shù)組 arr[] = { 2,9,1,3,7,6 }; 我們要用冒泡排序法讓其變得有序,到底該怎么做呢?我們先來看一下思路

 在這一次(注意!是一次?。┟芭菖判蛑?,我們讓這個無序數(shù)組中最大的數(shù)9排到了最后,以此類推,我們總共需要進行多少次這樣的排序呢?對的,答案是5次。

好的,那么這是我們對冒泡排序外部的分析,那么一次冒泡排序在數(shù)組里面要進行多少次比較呢?

讓我們想一想,第一次我們冒泡排序?qū)⒆畲蟮臄?shù)9排到了最后,那么第二次還需要對9進行比較嗎?

所以數(shù)組內(nèi)部元素排序的比較是會隨著外部冒泡排序次數(shù)而改變的。所以我們應(yīng)該創(chuàng)建兩個變量,一個用來控制外部排序次數(shù),一個用來控制內(nèi)部比較次數(shù)。接下來就上代碼吧

冒泡排序代碼

在這里要注意的是對于i和j的限制條件,要清楚i和j分別代表啥,并且弄清楚排序次數(shù)和比較次數(shù)就沒有問題了呀

冒泡排序兩種不同循環(huán)方法

在數(shù)據(jù)結(jié)構(gòu)與算法這門課程中,排序算法至關(guān)重要。

冒泡排序就是其中之一,其代碼我們必須爛熟于心。

原理

從表頭向表尾循環(huán),

比較相鄰的兩個元素大小,若前元素大于后元素,則交換兩者位置。

然后繼續(xù)向下比較

如下表

大的數(shù)字會慢慢置入表尾,猶如冒泡一般,大泡更快速度向水面靠近,故稱之為冒泡排序

上圖所示

當(dāng)冒泡到第四趟以后就沒必要往下面繼續(xù)循環(huán)

不然會增加復(fù)雜度

我們可以增加一個標(biāo)志flag

每趟冒泡之前會將flag初始化為0

假如冒泡的過程中有元素的交換,就將flag賦值為1;

在每趟冒泡之后會有檢驗flag是否為0

如果為0,代表沒有元素交換,break;

//第一種循環(huán)方法
void BubbleSort(ElementType A[],int N){    
 
for(int p=N-1;p>0;p--){
        int flag=0;    
        for(int i=1;i<=p;i++){
            if(A[i-1]>A[i]){    //如果前面元素大于后面元素就交換 
               int temp=A[i-1];    //swap(A[i-1],A[i]);
                A[i-1]=A[i];
                A[i]=temp;
                flag=1;
            }
        }
        if(flag==0){        //一輪冒泡后并沒有發(fā)生交換則說明數(shù)組已經(jīng)有序
            break;          //這樣做可以減少循環(huán)次數(shù)
        }
    }
}
//第二種循環(huán)方法
void BubbleSort(ElementType A[],int N){
    
    for(int i=0;i<N;i++){
        int flag=0;
        for(int j=0;j<N-i-1;j++){
            if(A[i-1]>A[i]){    //如果前面元素大于后面元素就交換
                int temp=A[i-1];    //swap(A[i-1],A[i]);
                A[i-1]=A[i];
                A[i]=temp;
                flag=1;
            }
        }
        if(flag==0){
            break;
        }
    }
}

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • C語言結(jié)構(gòu)體簡單入門講解

    C語言結(jié)構(gòu)體簡單入門講解

    這篇文章主要介紹了C語言結(jié)構(gòu)體簡單入門講解,本文講述了結(jié)構(gòu)體的基本定義和操作,講解了幾個比較實用的函數(shù)和案例,希望對你有所幫助
    2021-06-06
  • C++ 設(shè)置和獲取當(dāng)前工作路徑的實現(xiàn)代碼

    C++ 設(shè)置和獲取當(dāng)前工作路徑的實現(xiàn)代碼

    這篇文章主要介紹了C++ 設(shè)置和獲取當(dāng)前工作路徑的實現(xiàn)代碼,防止DLL加載不到配置和文件,需要的朋友可以參考下
    2017-09-09
  • C語言數(shù)據(jù)結(jié)構(gòu)之單鏈表的實現(xiàn)

    C語言數(shù)據(jù)結(jié)構(gòu)之單鏈表的實現(xiàn)

    鏈表是一種物理存儲結(jié)構(gòu)上非連續(xù)、非順序的存儲結(jié)構(gòu),數(shù)據(jù)元素的邏輯順序是通過鏈表中的指針鏈接次序?qū)崿F(xiàn)的。本文將用C語言實現(xiàn)單鏈表,需要的可以參考一下
    2022-06-06
  • 深度剖析C++對象池自動回收技術(shù)實現(xiàn)

    深度剖析C++對象池自動回收技術(shù)實現(xiàn)

    今天小編就為大家分享一篇關(guān)于深度剖析C++對象池自動回收技術(shù)實現(xiàn),小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • C++實現(xiàn)將簡單密碼譯回原文的方法

    C++實現(xiàn)將簡單密碼譯回原文的方法

    這篇文章主要介紹了C++實現(xiàn)將簡單密碼譯回原文的方法,可實現(xiàn)將簡單的字母位移類型的密碼譯回原文的功能,涉及C++簡單字符串操作相關(guān)技巧,需要的朋友可以參考下
    2016-05-05
  • C語言:十進制,BCD碼互換詳解

    C語言:十進制,BCD碼互換詳解

    這篇文章主要介紹了C語言十進制,BCD碼互換實例,小編覺得這篇文章寫的還不錯,實例簡單明了,需要的朋友可以參考下
    2021-09-09
  • C++并查集算法簡單詳解

    C++并查集算法簡單詳解

    大家好,本篇文章主要講的是C++并查集算法簡單詳解,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-02-02
  • 五個嵌入式C語言中的實用技巧分享

    五個嵌入式C語言中的實用技巧分享

    這篇文章主要和大家分享一下五個嵌入式C語言中的實用技巧,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)C語言有一定的幫助,需要的可以參考一下
    2022-12-12
  • C++中的atoi?函數(shù)簡介

    C++中的atoi?函數(shù)簡介

    這篇文章主要給大家分享的是C++中的atoi?函數(shù)的簡單介紹,在?stdlib.h?中?atoi?函數(shù),可用于將?char?字符串轉(zhuǎn)為?int?整數(shù)類型,集體的語法操作請參考下面文章的詳細(xì)內(nèi)容
    2021-11-11
  • C語言實現(xiàn)繪制余弦曲線

    C語言實現(xiàn)繪制余弦曲線

    這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)繪制余弦曲線的相關(guān)知識,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-01-01

最新評論