您好,登錄后才能下訂單哦!
這篇文章主要講解了C++如何實(shí)現(xiàn)冒泡排序,內(nèi)容清晰明了,對(duì)此有興趣的小伙伴可以學(xué)習(xí)一下,相信大家閱讀完之后會(huì)有幫助。
一、思路:
冒泡排序算法原理:
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ú)交換,說(shuō)明已經(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é)果:
看完上述內(nèi)容,是不是對(duì)C++如何實(shí)現(xiàn)冒泡排序有進(jìn)一步的了解,如果還想學(xué)習(xí)更多內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。