/* * 2014-6-15 21:58:27 * 维基百科 * * 该算法中,通过比较数组中相邻的(奇-偶)位置数字对,如果该奇偶对是错误的顺序(第一个大于第二个),则交换。 * 下一步重复该操作,但针对所有的(偶-奇)位置数字对。如此交替进行下去。 * * */ #include <iostream> #include <time.h> using namespace std; void bxy(int *a,int n) { int i; bool change = true; while(change) { change = false; for(i=0; i<n; i+=2)//奇偶对比较 { if(a[i]>a[i+1]) { change = true; swap(a[i],a[i+1]); } } for(i=1; i<n; i+=2)//偶奇对交换 { if(a[i]>a[i+1]) { change = true; swap(a[i],a[i+1]); } } //若始终没有交换,此时bool 变量change为FALSE,则说明排序成功 } } void print(int a[],int n) { for(int i=0; i<n; i++) { cout<<a[i]<<" "; } cout << endl; } void main() { int a[10]; srand((unsigned)time(NULL));//初始化随机数 for(int i=0; i<10; i++) { a[i]=rand()%20; } cout << "排序前:"; print(a,sizeof(a)/sizeof(a[0])); int n=sizeof(a)/sizeof(a[0]); bxy(a,n); cout << "排序后:"; print(a,sizeof(a)/sizeof(a[0])); }