溫馨提示×

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

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

C++如何實(shí)現(xiàn)冒泡排序

發(fā)布時(shí)間:2020-07-30 14:50:40 來(lái)源:億速云 閱讀:211 作者:小豬 欄目:編程語(yǔ)言

這篇文章主要講解了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é)果:

C++如何實(shí)現(xiàn)冒泡排序

看完上述內(nèi)容,是不是對(duì)C++如何實(shí)現(xiàn)冒泡排序有進(jìn)一步的了解,如果還想學(xué)習(xí)更多內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI