91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言如何實現數組元素排序

發布時間:2023-02-13 09:08:15 來源:億速云 閱讀:127 作者:iii 欄目:開發技術

這篇文章主要講解了“C語言如何實現數組元素排序”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“C語言如何實現數組元素排序”吧!

前言

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

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

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

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

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

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

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

  • 以此類推,進行 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>
intmain(){
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");
return0;
}

運行結果:

1 2 3 4 5 6 7 8 9 10

優化算法

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

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

優化后的算法實現如下所示:

#include<stdio.h>
intmain(){
int nums[10]={4,5,2,10,7,1,8,3,6,9};
int i, j, temp, isSorted;
//優化算法:最多進行 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;//如果沒有發生交換,說明剩下的元素已經排序好了
}
for(i=0; i<10; i++){
printf("%d ", nums[i]);
}
printf("\n");
return0;
}

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

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

感謝各位的閱讀,以上就是“C語言如何實現數組元素排序”的內容了,經過本文的學習后,相信大家對C語言如何實現數組元素排序這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

澄江县| 蒙自县| 眉山市| 金山区| 临沭县| 资溪县| 仁布县| 当涂县| 会泽县| 务川| 遂溪县| 铜山县| 台湾省| 东安县| 吐鲁番市| 齐河县| 芒康县| 中西区| 东港市| 桐城市| 南丰县| 焦作市| 周宁县| 星子县| 岢岚县| 文水县| 礼泉县| 彝良县| 庆云县| 汉沽区| 湟源县| 盐亭县| 明溪县| 余江县| 长沙市| 辽中县| 靖远县| 溆浦县| 嘉峪关市| 永定县| 师宗县|