冒泡排序法是一种相邻数据交换的排序方法。基本思想是:对待排序记录关键字从后往前(逆序)进行多遍扫描,当发现相邻两个关键字的次序与排序要求的规则不符时,就将这两个记录进行交换。这样,关键字较小的记录将逐渐从后面向前面移动,就像气泡在水中向上浮一样。
/*--------完整代码@映雪--------*/ #include <iostream> using namespace std; void BubbleSort(int a[],int n)/*冒泡排序*/ { int i,j,temp; for(i=0;i<n;i++) for(j=n-1;j>i;j--) { if(a[j-1]>a[j]) { temp=a[j]; a[j]=a[j-1]; a[j-1]=temp; } } } int main() { int a[]={3,12,7,32,7833,22,11,8,99,55}; BubbleSort(a,sizeof(a)/sizeof(int)); for(int i=0;i<sizeof(a)/sizeof(int);i++) { cout<<a[i]<< " "; } return 0; }
改进算法:设置一个标志变量flag,在每一遍扫描之前将其设置为0,在扫描过程中,若有数据交换,则设置其值为1.在一遍扫描完成之后,判断flag的值,若其值为0,表示在这一遍扫描中已经没有数据进行交换,就不需要进行后续扫描。
/*----改进的冒泡排序-------*/ void BubbleSort(int a[],int n)/*冒泡排序*/ { int temp,flag=0; for(int i=0;i<n-1;i++)/*需要n-1次扫描*/ { for(int j=n-1;j>i;j--) { if(a[j-1]>a[j]) { temp=a[j]; a[j]=a[j-1]; a[j-1]=temp; flag=1; } } if(flag==0) break; else flag=0; } }