用C++函式模板實現氣泡排序
阿新 • • 發佈:2019-01-25
此程式為從小到大排序,這個程式比較精彩的部分就是加入了false,大致思路為:當一個數字比它後面的數字小時,不執行if(a[j]>a[j+1])語句。減少了執行次數。(直接把含有flag的語句注掉,編譯也可以通過)。寫程式時應該注意的是第6 、14 、 22行的 template <typename T> 不能丟!!!!!
#include<iostream> #define MAXSIZE 100 #define FALSE 0 #define TURE 1 using namespace std; template <typename T> void swap(T a[],T i,T j) { int tmp; tmp=a[j]; a[j]=a[i]; a[i]=tmp; } template <typename T> void print(T a[], T len) { int i; for(i=0;i<len;i++) cout<<a[i]<<"\t"; cout<<endl; } template <typename T> void Bubble_sort(T a[],T len) { int i,j; int flag=FALSE; //FALSE代表序列依舊是亂序; for(i=1;i<=len-1&&flag==FALSE;i++) { flag=TURE; //先假設flag為TURE for(j=0;j<=len-i-1;j++) { if(a[j]>a[j+1]) //如果是無序執行if語句 { swap(a,j,j+1); flag=FALSE; //執行後flag變為FALSE; } } } } int main() { int len=0,tmp=0; int a[MAXSIZE]={0}; //初始化; char string[100]={0}; cout<<"請輸入任意個數的整數,以回車結束"<<endl; gets(string); char *str=string; // 字元型陣列 while(*str!='\0') { while(*str!=' '&&*str!='\0') //'1','0',' ','1','2' //*str取內容 { a[len]=a[len]*10+*str-'0'; //取內容加* str++; //指標,取地址; } len++; while(*str==' ') str++; } cout<<endl; cout<<"排序前:"; print(a,len); //a為實際輸入的長度; Bubble_sort(a,len); cout<<"排序後:"; print(a,len); return 0; }
執行結果示範: