日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

C語言中的冒泡排序問題_C 語言

作者:我的博爾赫斯 ? 更新時間: 2023-02-02 編程語言

冒泡排序的原理

冒泡排序的步驟

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

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

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

讓我們想一想,第一次我們冒泡排序將最大的數9排到了最后,那么第二次還需要對9進行比較嗎?

所以數組內部元素排序的比較是會隨著外部冒泡排序次數而改變的。所以我們應該創建兩個變量,一個用來控制外部排序次數,一個用來控制內部比較次數。接下來就上代碼吧

冒泡排序代碼

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

冒泡排序兩種不同循環方法

在數據結構與算法這門課程中,排序算法至關重要。

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

原理

從表頭向表尾循環,

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

然后繼續向下比較

如下表

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

上圖所示

當冒泡到第四趟以后就沒必要往下面繼續循環

不然會增加復雜度

我們可以增加一個標志flag

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

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

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

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

//第一種循環方法
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){        //一輪冒泡后并沒有發生交換則說明數組已經有序
            break;          //這樣做可以減少循環次數
        }
    }
}
//第二種循環方法
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;
        }
    }
}

總結

原文鏈接:https://blog.csdn.net/qq_62236390/article/details/121191580

欄目分類
最近更新