C++實(shí)現(xiàn)冒泡排序(BubbleSort)
本文實(shí)例為大家分享了C++實(shí)現(xiàn)冒泡排序的具體代碼,供大家參考,具體內(nèi)容如下
一、思路:
冒泡排序算法原理:
1.比較相鄰的元素。如果第一個(gè)數(shù)比第二個(gè)數(shù)大,就交換他們兩個(gè)。
2.對(duì)每一對(duì)相鄰元素做同樣的工作,從開(kāi)始第一對(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é)果:

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
非常漂亮的新年祝福!C語(yǔ)言實(shí)現(xiàn)漂亮的煙花效果
非常漂亮的新年祝福!這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)漂亮的煙花效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-02-02
C++通過(guò)CryptoPP計(jì)算Hash值的過(guò)程詳解
Crypto++ (CryptoPP) 是一個(gè)用于密碼學(xué)和加密的C++庫(kù),它是一個(gè)開(kāi)源項(xiàng)目,提供了大量的密碼學(xué)算法和功能,本文小編給大家介紹了C++通過(guò)CryptoPP計(jì)算Hash值的過(guò)程,文中通過(guò)代碼示例給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-11-11
使用Qt封裝一個(gè)發(fā)送http請(qǐng)求通用類
這篇文章主要為大家詳細(xì)介紹了如何使用Qt封裝一個(gè)通用類,可以通過(guò)QNetworkRequest和QNetworkReply進(jìn)行http請(qǐng)求,感興趣的可以了解一下2024-12-12
C++實(shí)操之內(nèi)聯(lián)成員函數(shù)介紹
大家好,本篇文章主要講的是C++實(shí)操之內(nèi)聯(lián)成員函數(shù)介紹,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽2021-12-12
淺談C#中List<T>對(duì)象的深度拷貝問(wèn)題
下面小編就為大家?guī)?lái)一篇淺談C#中List<T>對(duì)象的深度拷貝問(wèn)題。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-01-01
C語(yǔ)言遞歸之漢諾塔和青蛙跳臺(tái)階問(wèn)題
這篇文章主要介紹了C語(yǔ)言遞歸之漢諾塔問(wèn)題和青蛙跳臺(tái)階問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04

