C語(yǔ)言詳解冒泡排序?qū)崿F(xiàn)
前言
在排序中,有各種各樣的排序方式,今天我們將要來(lái)介紹《冒泡排序》。今天會(huì)從冒泡排序的具體意義和他的操作來(lái)展開(kāi)。
一、冒泡排序是什么
從左到右,相鄰元素進(jìn)行比較。每次比較一輪,就會(huì)找到序列中最大的一個(gè)或最小的一個(gè)。這個(gè)數(shù)就會(huì)從序列的最右邊冒出來(lái)。
以從小到大排序?yàn)槔?,第一輪比較后,所有數(shù)中最大的那個(gè)數(shù)就會(huì)浮到最右邊;第二輪比較后,所有數(shù)中第二大的那個(gè)數(shù)就會(huì)浮到倒數(shù)第二個(gè)位置……就這樣一輪一輪地比較,最后實(shí)現(xiàn)從小到大排序。
二、具體步驟
1.代碼解釋
代碼如下(示例):
#include<stdio.h> void bubble(int arr[], int sz) { for (int j = 0; j < sz - 1; j++) //一趟排n-1次(n為n個(gè)數(shù)) //n個(gè)數(shù)的話,就要走n-1趟(每一趟排完以后,都 //要減去最后一個(gè)排好的數(shù)) { int flag = 0; for (int i = 0; i < sz-1-j; i++) { if (arr[i] <arr[i + 1]) { int temp = arr[i]; arr[i] = arr[i + 1]; arr[i + 1] = temp; flag = 1; } } if (flag == 0) { break; } } } int main() { int arr[] = { 要排序的元素 }; int sz = sizeof(arr) / sizeof(arr[0]); // sz為數(shù)組元素個(gè)數(shù)。 bubble(arr,sz); for (int i = 0; i < sz; i++) { printf("%d ", arr[i]); } }
舉例詳細(xì)說(shuō)明:
同理可得,每一趟以后減去一個(gè)元素,則每趟需要減去一次次數(shù)。
所以for循環(huán)中,需要i<sz-1-j.
當(dāng)遇到規(guī)范的數(shù)組元素時(shí)(不需要排序),int flag =0初始為零,若需要排序,則進(jìn)入 if (arr[i] <arr[i + 1])循環(huán)中,則flag變?yōu)?;若一趟過(guò)完之后,發(fā)現(xiàn)并未交換元素,則flag=0未變,直接跳出循環(huán),減少了時(shí)間復(fù)雜度。
2.讀入數(shù)據(jù)
代碼如下(示例)
#include<stdio.h> void bubble(int arr[], int sz) { for (int j = 0; j < sz - 1; j++) //一趟排n-1次(n為n個(gè)數(shù)) //n個(gè)數(shù)的話,就要走n-1趟(每一趟排完以后,都 //要減去最后一個(gè)排好的數(shù)) { int flag = 0; for (int i = 0; i < sz-1-j; i++) { if (arr[i] <arr[i + 1]) { int temp = arr[i]; arr[i] = arr[i + 1]; arr[i + 1] = temp; flag = 1; } } if (flag == 0) { break; } } } int main() { int arr[] = { 1,3,54,76,7,5,45,9 }; int sz = sizeof(arr) / sizeof(arr[0]); bubble(arr,sz); for (int i = 0; i < sz; i++) { printf("%d ", arr[i]); } }
那么可以看出,輸出的結(jié)果就是
76,54,45,9,7,5,3,1
總結(jié)
這里對(duì)文章進(jìn)行總結(jié):
從大到小,和從小打大至于要改變if (arr[i] <arr[i + 1])中符號(hào)即可。
注意:在調(diào)用函數(shù)時(shí),在函數(shù)內(nèi)部無(wú)法算出sz,即數(shù)組的元素個(gè)數(shù),所以需在主函數(shù)中算出后,再傳入函數(shù)形參中!!
到此這篇關(guān)于C語(yǔ)言詳解冒泡排序?qū)崿F(xiàn)思路的文章就介紹到這了,更多相關(guān)C語(yǔ)言 冒泡排序內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
QT樹(shù)的具體項(xiàng)目實(shí)現(xiàn)
本文主要介紹了QT樹(shù)的具體項(xiàng)目實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06C++超詳細(xì)講解標(biāo)準(zhǔn)庫(kù)
C++強(qiáng)大的功能來(lái)源于其豐富的類庫(kù)及庫(kù)函數(shù)資源。C++標(biāo)準(zhǔn)庫(kù)(C++ Standard Library, 亦可稱作,C++標(biāo)準(zhǔn)程序庫(kù))的內(nèi)容總共在50個(gè)標(biāo)準(zhǔn)頭文件中定義。在C++開(kāi)發(fā)中,要盡可能地利用標(biāo)準(zhǔn)庫(kù)完成2022-06-06C++ 多態(tài)性虛函數(shù)和動(dòng)態(tài)綁定學(xué)習(xí)筆記
這篇文章主要為大家介紹了C++ 多態(tài)性虛函數(shù)和動(dòng)態(tài)綁定學(xué)習(xí)筆記,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10C++ 中消息隊(duì)列函數(shù)實(shí)例詳解
這篇文章主要介紹了C++ 中消息隊(duì)列函數(shù)實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-06-06