欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

如何在C語言中對數組元素進行冒泡排序-創(chuàng)新互聯

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

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

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

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

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

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

以從小到大排序為例,冒泡排序的整體思想是這樣的:

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

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

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

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

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

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

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

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

至此,排序結束。


算法總結及實現

對擁有 n 個元素的數組 R[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] 上。
。。。。。。
以此類推,直到整個數組從小到大排序。

具體的代碼實現如下所示:


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

運行結果:
1 2 3 4 5 6 7 8 9 10


優(yōu)化算法

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

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

優(yōu)化后的算法實現如下所示:


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

我們額外設置了一個變量 isSorted,用它作為標志,值為“真”表示剩下的元素已經排序好了,值為“假”表示剩下的元素還未排序好。

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

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


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

新聞名稱:如何在C語言中對數組元素進行冒泡排序-創(chuàng)新互聯
文章起源:http://www.chinadenli.net/article4/ehsie.html

成都網站建設公司_創(chuàng)新互聯,為您提供定制網站網站導航Google軟件開發(fā)外貿建站標簽優(yōu)化

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯

網站托管運營