程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 冒泡排序C++實現

冒泡排序C++實現

編輯:關於C++

算法描述:

從數組開頭開始向後遍歷,如果a[i]>a[i+1]則交換兩個,重復做,直到沒有交換的數對。

下面給出整數數組的兩種實現,一種是單方向的冒泡(即將大的數字向後交換),第二種是冒泡和下沉交替進行(即一次大數字向後移動,一次小數字向前移動),並比較兩個實現的運行時間:

第一種:

#include

#include

using namespace std;

const int Num=2000;

void exch(int* s,int a,int b)

{

int mid=s[a];

s[a]=s[b];

s[b]=mid;

}

int main()

{

int array[Num];

int flag=1;//記錄一趟最後交換的下標

int mod=0;

srand(3);//初始化隨機數

for(int i=0;iarray[j+1])

{

exch(array,j,j+1);

flag=j;

}

}

/*if(mod%2==0)

{

for(int j=0;jarray[j+1])

{

exch(array,j,j+1);

flag=j;

}

}

mod++;

}

else

{

for(int j=Num-1;j>0;j--)

{

if(array[j]

\

第二種:#include

 

#include

using namespace std;

const int Num=2000;

void exch(int* s,int a,int b)

{

int mid=s[a];

s[a]=s[b];

s[b]=mid;

}

int main()

{

int array[Num];

int flag=1;//記錄一趟最後交換的下標

int mod=0;

srand(3);//初始化隨機數

for(int i=0;iarray[j+1])

{

exch(array,j,j+1);

flag=j;

}

}*/

if(mod%2==0)

{

for(int j=0;jarray[j+1])

{

exch(array,j,j+1);

flag=j;

}

}

mod++;

}

else

{

for(int j=Num-1;j>0;j--)

{

if(array[j]

 

\

一般情況下交替進行冒泡排序要優於單方向的冒泡。對於長度為N的數組,最好情況下比較N-1次,交換0次;最壞情況下比較N(N-1)/2次,交換N(N-1)/2次。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved