C++實(shí)現(xiàn)冒泡排序(BubbleSort)
本文實(shí)例為大家分享了C++實(shí)現(xiàn)冒泡排序的具體代碼,供大家參考,具體內(nèi)容如下
一、思路:
冒泡排序算法原理:
1.比較相鄰的元素。如果第一個(gè)數(shù)比第二個(gè)數(shù)大,就交換他們兩個(gè)。
2.對(duì)每一對(duì)相鄰元素做同樣的工作,從開始第一對(duì)到結(jié)尾的最后一對(duì)。在這一點(diǎn),最后的元素應(yīng)該會(huì)是最大的數(shù)。
3.針對(duì)所有的元素重復(fù)以上的步驟,除了最后一個(gè)。(因?yàn)樽詈笠粋€(gè)已經(jīng)排好,是最大的數(shù))
4.持續(xù)每次對(duì)越來(lái)越少的元素重復(fù)上面的步驟,直到?jīng)]有任何一對(duì)數(shù)字需要比較。(接著排第二大的數(shù),一直下去)
如:使用冒泡排序:25 16 9 90 23
第一輪:如果某個(gè)數(shù)大于后面的數(shù),那么就交換;
第一次 16 25 9 90 23
第二次 16 9 25 90 23
…..
最終: 16 9 25 23 90 最大的數(shù)就冒到了最后。
比較次數(shù):4次
第二輪:得到第二大的數(shù):9 16 23 25 90
到此,已經(jīng)排好序,可以提前結(jié)束排序。
二、實(shí)現(xiàn)代碼:
#include <iostream> using namespace std; const int maxSize = 20; // 冒泡排序:從小到大排序 template <class T> void BubbleSort(T arr[], int n) { int i, j, flag; T temp; for(i = 0; i < n-1; i++) { // 進(jìn)行n-1次 flag = 0; // 交換標(biāo)志,0表示無(wú)交換,1表示有交換 for(j = 0; j < (n-i-1); j++) { // 數(shù)組下標(biāo)最大為n-1 if(arr[j] > arr[j+1]) { // 逆序就交換 flag = 1; // 有交換 temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } if(flag == 0) // 無(wú)交換,說明已經(jīng)全部排好序,提前結(jié)束 break; } // for } // BubbleSort int main(int argc, const char * argv[]) { int i, n, arr[maxSize]; cout << "請(qǐng)輸入要排序的數(shù)的個(gè)數(shù):"; cin >> n; cout << "請(qǐng)輸入要排序的數(shù):"; for(i = 0; i < n; i++) cin >> arr[i]; cout << "排序前:" << endl; for(i = 0; i < n; i++) cout << arr[i] << " "; cout << endl; BubbleSort(arr, n); cout << "排序后:" << endl; for(i = 0; i < n; i++) cout << arr[i] << " "; cout << endl; return 0; }
測(cè)試結(jié)果:
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C語(yǔ)言動(dòng)態(tài)規(guī)劃點(diǎn)殺dp算法LeetCode炒股習(xí)題案例解析
這篇文章主要介紹為了C語(yǔ)言動(dòng)態(tài)規(guī)劃點(diǎn)殺dp算法,本文以LeetCode炒股習(xí)題案例來(lái)為大家進(jìn)行詳細(xì)解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助2022-02-02C語(yǔ)言動(dòng)態(tài)內(nèi)存管理的實(shí)現(xiàn)
本文主要介紹了C語(yǔ)言動(dòng)態(tài)內(nèi)存管理的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08C/C++ 獲取Windows系統(tǒng)的位數(shù)32位或64位的實(shí)現(xiàn)代碼
這篇文章主要介紹了C/C++ 獲取Windows系統(tǒng)的位數(shù)32位或64位的實(shí)現(xiàn)代碼的相關(guān)資料,希望通過本文能幫助到大家,讓大家實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下2017-10-10詳解C++編程中類的成員變量和成員函數(shù)的相關(guān)知識(shí)
這篇文章主要介紹了C++編程中類的成員變量和成員函數(shù)的相關(guān)知識(shí),是C++入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-09-09C語(yǔ)言超詳細(xì)講解輪轉(zhuǎn)數(shù)組
這篇文章主要給大家講解輪轉(zhuǎn)數(shù)組的問題,一個(gè)問題不局限于一種解法,希望你看了本文的解決方法以后可以舉一反三自己編寫,這樣你的技術(shù)水平會(huì)有質(zhì)的提高2022-04-04