**1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数 3. 针对所有的元素重复以上的步骤,除了最后一个。 4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。**
** #include<iostream> #include<cstdio> #define maxn 10000 using namespace std; void bubble1_sort(int a[],int n); void bubble2_sort(int a[],int n); void bubble3_sort(int a[],int n); void swap(int *a,int *b); int main(void) { int n,a[maxn],b[maxn],c[maxn]; cout<<"please input a number:"; cin>>n; for(int i=0; i<n; i++) { cin>>a[i]; } bubble1_sort(a,n); cout<<endl<<endl<<endl; for(int i=0; i<n; i++) { cin>>b[i]; } bubble2_sort(b,n); cout<<endl<<endl<<endl; for(int i=0; i<n; i++) { cin>>c[i]; } bubble1_sort(c,n); } void swap(int *a,int *b) { int temp; temp=*a; *a=*b; *b=temp; } void bubble1_sort(int a[],int n) { for(int i=0; i<n-1; i++) { for(int j=0; j<n-i-1; j++) { if(a[j]>a[j+1]) { swap(&a[j],&a[j+1]); } } for(int k=0; k<n; k++) { cout<<a[k]<<" "; } cout<<endl; } } /* 在bubble1_sort的基础上设置交换标志变量flag, 标志变量用于记录每趟冒泡排序是否发生数据元素位置交换, 如果没有发生交换,说明序列已经有序了,不必继续进行下去了。 */ void bubble2_sort(int a[],int n) { int flag=1; for(int i=0; i<n-1&&flag!=0; i++) { flag=0; for(int j=0; j<n-i-1; j++) { if(a[j]>a[j+1]) { swap(&a[j],&a[j+1]); flag=1; } } for(int k=0;k<n;k++) { cout<<a[k]<<" "; } cout<<endl; } } /* 定向冒泡排序,搅拌排序、来回排序等,是冒泡排序的一种变形 此算法与冒泡排序的不同处在于排序时是以双向在序列中进行排序。 鸡尾酒排序在于排序过程是先从低到高,然后从高到低; 而冒泡排序则仅从低到高去比较序列里的每个元素。 它可以得到比冒泡排序稍微好一点的效能,原因是冒泡排序只从一个方向进行比对(由低到高),每次循环只移动一个项目。 */ void bubble3_sort(int a[],int n) { int left=0,right=n-1; int i,j; while(left<right) { for (j = left; j < right; j++) if (a[j] > a[j + 1]) swap(&a[j],&a[j + 1]); right--; for (j = right; j > left; j--) if (a[j - 1] > a[j]) swap(&a[j - 1], &a[j]); left++; } for(int k=0; k<n; k++) { cout<<a[k]; } cout<<endl; }**