/* *2. 编写一个冒泡排序的算法,并且在main函数中验证其功能已实现 *冒泡排序(Bubble Sort)的基本思想,设想排序R[1]到R[n]垂直放置,将记录 *R[i]看作是重量为R[i].key的气泡;根据气泡不能在重气泡之下的原则,从下往 *上扫描数组R,凡违反原则的轻气泡,就使其向上“飘浮”,如此反复进行,直到 *最后任何两个气泡都是轻者在上,重者在下为止。就好像气泡从水中上冒一样 *趟次 0(初始) 1 2 3 4 5 6 7 49 13 13 13 13 13 13 13 38 49 27 27 27 27 27 27 65 38 49 38 38 38 38 38 97 65 38 49 49 49 49 49 76 97 65 65 49' 49' 49' 49' 13 76 97 97 65 65 65 65 27 27 76 76 76 76 76 76 49’ 49' 49' 49' 97 97 97 97 */ //程序代码如下: #include<iostream> using namespace std; const int maxsize=100; //排序表容量,假设为100 typedef int datatype; typedef struct { datatype key; //关键字域 } rectype; //记录类型 typedef rectype list[maxsize+1]; void BubbleSort(list R,int n) //上升法冒泡排序 { int i,j,flag; //引入标志flag for(i=1;i<=n-1;i++) //有n个数则进行n-1次比较 { flag=0; //置为未交换标志 for(j=n;j>=i+1;j--) //从下往上扫描 if(R[j].key<R[j-1].key) //如果其上一个比当前值要大 { //交换记录 flag=1; R[0]=R[j]; R[j]=R[j-1]; R[j-1]=R[0];//交换,R[0]做辅助量 } for(int i=1;i<=n;i++) cout<<R[i].key <<" "; cout<<endl; if(!flag) break; //本趟未交换过记录,排序结束 } } //在主函数验证冒泡排序功能 int main() { list R; const int n=8; cout<<" 欢迎来到冒泡排序验证界面!!!!!! "<<endl; cout<<"-------请输入key------------"<<endl; for(int i=1;i<=n;i++) cin>>R[i].key; cout<<endl; cout<<"-------未排序前序列----------"<<endl; for(int i=1;i<=n;i++) cout<<R[i].key<<" "; cout<<endl; cout<<"-------调用冒泡排序函数BubbleSort-------"<<endl; cout<<"----------排序过程如下-------------"<<endl; BubbleSort(R,n); cout<<endl; cout<<"------------最后排序结果-----------"<<endl; for(int i=1;i<=n;i++) cout<<R[i].key <<" "; system("pause"); return 0; }
posted on 2011-12-02 22:11 1.曲待续 阅读(593) 评论(0) 编辑 收藏 举报