溫馨提示×

溫馨提示×

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

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

C語言中冒泡排序的示例分析

發(fā)布時間:2022-03-04 09:46:24 來源:億速云 閱讀:111 作者:小新 欄目:開發(fā)技術(shù)

這篇文章給大家分享的是有關(guān)C語言中冒泡排序的示例分析的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

(壹)冒泡排序

1.1冒泡排序的設(shè)計

冒泡排序(Bubble Sort)也是一種簡單直觀的排序算法。它重復(fù)地走訪過要排序的數(shù)列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數(shù)列的工作是重復(fù)地進行直到?jīng)]有再需要交換,也就是說該數(shù)列已經(jīng)排序完成。這個算法的名字由來是因為越小的元素會經(jīng)由交換慢慢"浮"到數(shù)列的頂端。

1.2冒泡排序的步驟

  • 比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。

  • 對每一對相鄰元素作同樣的工作,從開始第一對到結(jié)尾的最后一對。這步做完后,最后的元素會是最大的數(shù)。

  • 針對所有的元素重復(fù)以上的步驟,除了最后一個。

  • 持續(xù)每次對越來越少的元素重復(fù)上面的步驟,直到?jīng)]有任何一對數(shù)字需要比較。

????動圖演示1(數(shù)據(jù)較?。?/p>

C語言中冒泡排序的示例分析

????動圖演示2(數(shù)據(jù)較大)

C語言中冒泡排序的示例分析

1.3冒泡排序的實現(xiàn)

Tips:每一趟冒泡排序后都會減少一個需要比較的數(shù) -->  因為每一趟的冒泡排序都會將所比較的最大/最小值移動到數(shù)組的最后面

C語言中冒泡排序的示例分析

C語言中冒泡排序的示例分析

C語言中冒泡排序的示例分析

(貳)數(shù)組作為函數(shù)參數(shù)

往往我們在寫代碼的時候,會將數(shù)組作為參數(shù)傳個函數(shù),比如:我要實現(xiàn)一個冒泡排序(這里要講算法思想)函數(shù)將一個整形數(shù)組排序。 那我們將會這樣使用該函數(shù):

2.1冒泡排序函數(shù)的錯誤設(shè)計

接下來看一個例子

C語言中冒泡排序的示例分析

C語言中冒泡排序的示例分析

最后結(jié)果:

C語言中冒泡排序的示例分析

并沒有預(yù)料中的達到排序的作用

在我們之前的學(xué)習(xí)中,我們知道了 數(shù)組名表示的數(shù)組首元素的地址 

數(shù)組名在傳遞給函數(shù)的時候,會降級變成首元素的地址

C語言中冒泡排序的示例分析

C語言中冒泡排序的示例分析

C語言中冒泡排序的示例分析

C語言中冒泡排序的示例分析

數(shù)組名單獨放在sizeof內(nèi)部的時候 ,如:sizeof(arr),這里的arr表示整個數(shù)組而不是首元素的地址

對數(shù)組名進行&取地址后的操作

我們知道,對指向數(shù)組元素的指針進行自增運算是跳過一個元素(所占字節(jié)數(shù)的地址),其實本質(zhì)是跳過一個其指針類型大小。對數(shù)組名進行取地址后獲得的是數(shù)組的地址,如果將它和數(shù)組首元素地址以及數(shù)組名打印出來,會發(fā)現(xiàn)它們的值是一樣的。但如果對&arr進行+1等操作,就會發(fā)現(xiàn)跳過的不是一個元素的大小,而是一個數(shù)組的大小。

C語言中冒泡排序的示例分析

2.2冒泡排序函數(shù)的正確設(shè)計

當(dāng)數(shù)組傳參的時候,實際上只是把數(shù)組的首元素的地址傳遞過去了。所以即使在函數(shù)參數(shù)部分寫成數(shù)組的形式:int arr[]表示的依然是一個指針:int *arr。那么,函數(shù)內(nèi)部的sizeof(arr)結(jié)果是4。

C語言中冒泡排序的示例分析

C語言中冒泡排序的示例分析

C語言中冒泡排序的示例分析

C語言中冒泡排序的示例分析

(叁)對數(shù)組名的拓展解析

數(shù)組名就是首元素的地址,但是有兩個例外

  • sizeof(數(shù)組名),這里的數(shù)組名表示整個數(shù)組,sizeof(數(shù)組名)表示的是整個數(shù)組的大小

  • &數(shù)組名,這里的數(shù)組名表示的是整個數(shù)組,取出的是整個數(shù)組的地址

C語言中冒泡排序的示例分析

C語言中冒泡排序的示例分析

 &arr取出的是整個數(shù)組的地址,所以 arr + 1后跳過了整個數(shù)組的大小為 

4 * 10 = 40 個字節(jié)的地址大小

感謝各位的閱讀!關(guān)于“C語言中冒泡排序的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI