/*
*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;
}
数据结构之冒泡排序
最新推荐文章于 2022-03-27 17:45:09 发布