1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
      如何在C語言中對數(shù)組元素進(jìn)行冒泡排序-創(chuàng)新互聯(lián)

      如何在C語言中對數(shù)組元素進(jìn)行冒泡排序?針對這個問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

      創(chuàng)新互聯(lián)公司擁有10余年的建站服務(wù)經(jīng)驗(yàn),在此期間,我們發(fā)現(xiàn)較多的客戶在挑選建站服務(wù)商前都非常的猶豫。主要問題集中:在無法預(yù)知自己的網(wǎng)站呈現(xiàn)的效果是什么樣的?也無法判斷選擇的服務(wù)商設(shè)計出來的網(wǎng)頁效果自己是否會滿意?創(chuàng)新互聯(lián)公司業(yè)務(wù)涵蓋了互聯(lián)網(wǎng)平臺網(wǎng)站建設(shè)、移動平臺網(wǎng)站制作、網(wǎng)絡(luò)推廣、按需定制設(shè)計等服務(wù)。創(chuàng)新互聯(lián)公司網(wǎng)站開發(fā)公司本著不拘一格的網(wǎng)站視覺設(shè)計和網(wǎng)站開發(fā)技術(shù)相結(jié)合,為企業(yè)做網(wǎng)站提供成熟的網(wǎng)站設(shè)計方案。

      在實(shí)際開發(fā)中,有很多場景需要我們將數(shù)組元素按照從大到小(或者從小到大)的順序排列,這樣在查閱數(shù)據(jù)時會更加直觀,例如:

      • 一個保存了班級學(xué)號的數(shù)組,排序后更容易分區(qū)好學(xué)生和壞學(xué)生;

      • 一個保存了商品單價的數(shù)組,排序后更容易看出它們的性價比。

      對數(shù)組元素進(jìn)行排序的方法有很多種,比如冒泡排序、歸并排序、選擇排序、插入排序、快速排序等,其中最經(jīng)典最需要掌握的是「冒泡排序」。

      以從小到大排序?yàn)槔芭菖判虻恼w思想是這樣的:

      • 從數(shù)組頭部開始,不斷比較相鄰的兩個元素的大小,讓較大的元素逐漸往后移動(交換兩個元素的值),直到數(shù)組的末尾。經(jīng)過第一輪的比較,就可以找到較大的元素,并將它移動到最后一個位置。

      • 第一輪結(jié)束后,繼續(xù)第二輪。仍然從數(shù)組頭部開始比較,讓較大的元素逐漸往后移動,直到數(shù)組的倒數(shù)第二個元素為止。經(jīng)過第二輪的比較,就可以找到次大的元素,并將它放到倒數(shù)第二個位置。

      • 以此類推,進(jìn)行 n-1(n 為數(shù)組長度)輪“冒泡”后,就可以將所有的元素都排列好。

      整個排序過程就好像氣泡不斷從水里冒出來,較大的先出來,次大的第二出來,最小的最后出來,所以將這種排序方式稱為冒泡排序(Bubble Sort)。

      下面我們以“3  2  4  1”為例對冒泡排序進(jìn)行說明。

      第一輪  排序過程
      3  2  4  1    (最初)
      2  3  4  1    (比較3和2,交換)
      2  3  4  1    (比較3和4,不交換)
      2  3  1  4    (比較4和1,交換)
      第一輪結(jié)束,較大的數(shù)字 4 已經(jīng)在最后面,因此第二輪排序只需要對前面三個數(shù)進(jìn)行比較。

      第二輪  排序過程
      2  3  1  4 (第一輪排序結(jié)果)
      2  3  1  4 (比較2和3,不交換)
      2  1  3  4 (比較3和1,交換)
      第二輪結(jié)束,次大的數(shù)字 3 已經(jīng)排在倒數(shù)第二個位置,所以第三輪只需要比較前兩個元素。

      第三輪  排序過程
      2  1  3  4  (第二輪排序結(jié)果)
      1  2  3  4  (比較2和1,交換)

      至此,排序結(jié)束。


      算法總結(jié)及實(shí)現(xiàn)

      對擁有 n 個元素的數(shù)組 R[n] 進(jìn)行 n-1 輪比較。

      第一輪,逐個比較 (R[1], R[2]),  (R[2], R[3]),  (R[3], R[4]),  …….  (R[N-1], R[N]),較大的元素被移動到 R[n] 上。

      第二輪,逐個比較 (R[1], R[2]),  (R[2], R[3]),  (R[3], R[4]),  …….  (R[N-2], R[N-1]),次大的元素被移動到 R[n-1] 上。
      。。。。。。
      以此類推,直到整個數(shù)組從小到大排序。

      具體的代碼實(shí)現(xiàn)如下所示:


      #include 
      int main(){
        int nums[10] = {4, 5, 2, 10, 7, 1, 8, 3, 6, 9};
        int i, j, temp;
        //冒泡排序算法:進(jìn)行 n-1 輪比較
        for(i=0; i<10-1; i++){
          //每一輪比較前 n-1-i 個,也就是說,已經(jīng)排序好的最后 i 個不用比較
          for(j=0; j<10-1-i; j++){
            if(nums[j] > nums[j+1]){
              temp = nums[j];
              nums[j] = nums[j+1];
              nums[j+1] = temp;
            }
          }
        }
        
        //輸出排序后的數(shù)組
        for(i=0; i<10; i++){
          printf("%d ", nums[i]);
        }
        printf("\n");
        
        return 0;
      }

      運(yùn)行結(jié)果:
      1 2 3 4 5 6 7 8 9 10


      優(yōu)化算法

      上面的算法是大部分教材中提供的算法,其中有一點(diǎn)是可以優(yōu)化的:當(dāng)比較到第 i 輪的時候,如果剩下的元素已經(jīng)排序好了,那么就不用再繼續(xù)比較了,跳出循環(huán)即可,這樣就減少了比較的次數(shù),提高了執(zhí)行效率。

      未經(jīng)優(yōu)化的算法一定會進(jìn)行 n-1 輪比較,經(jīng)過優(yōu)化的算法最多進(jìn)行 n-1 輪比較,高下立判。

      優(yōu)化后的算法實(shí)現(xiàn)如下所示:


      #include 
      int main(){
        int nums[10] = {4, 5, 2, 10, 7, 1, 8, 3, 6, 9};
        int i, j, temp, isSorted;
        
        //優(yōu)化算法:最多進(jìn)行 n-1 輪比較
        for(i=0; i<10-1; i++){
          isSorted = 1; //假設(shè)剩下的元素已經(jīng)排序好了
          for(j=0; j<10-1-i; j++){
            if(nums[j] > nums[j+1]){
              temp = nums[j];
              nums[j] = nums[j+1];
              nums[j+1] = temp;
              isSorted = 0; //一旦需要交換數(shù)組元素,就說明剩下的元素沒有排序好
            }
          }
          if(isSorted) break; //如果沒有發(fā)生交換,說明剩下的元素已經(jīng)排序好了
        }
        for(i=0; i<10; i++){
          printf("%d ", nums[i]);
        }
        printf("\n");
        
        return 0;
      }

      我們額外設(shè)置了一個變量 isSorted,用它作為標(biāo)志,值為“真”表示剩下的元素已經(jīng)排序好了,值為“假”表示剩下的元素還未排序好。

      每一輪比較之前,我們預(yù)先假設(shè)剩下的元素已經(jīng)排序好了,并將 isSorted 設(shè)置為“真”,一旦在比較過程中需要交換元素,就說明假設(shè)是錯的,剩下的元素沒有排序好,于是將 isSorted 的值更改為“假”。

      每一輪循環(huán)結(jié)束后,通過檢測 isSorted 的值就知道剩下的元素是否排序好。


      關(guān)于如何在C語言中對數(shù)組元素進(jìn)行冒泡排序問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識。


      網(wǎng)頁題目:如何在C語言中對數(shù)組元素進(jìn)行冒泡排序-創(chuàng)新互聯(lián)
      鏈接URL:http://www.ef60e0e.cn/article/ehsie.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        双柏县| 陕西省| 金华市| 松江区| 涟水县| 尼木县| 麦盖提县| 黄石市| 寿阳县| 株洲市| 鄂州市| 会泽县| 连城县| 岚皋县| 嘉义县| 喀喇沁旗| 同仁县| 南岸区| 藁城市| 临颍县| 西峡县| 定西市| 永兴县| 东阿县| 集安市| 和顺县| 抚州市| 壶关县| 万盛区| 漾濞| 铁力市| 沙雅县| 阳泉市| 嘉禾县| 钦州市| 阿瓦提县| 曲周县| 新干县| 自治县| 本溪市| 钦州市|