冒泡排序(小----->大)的思想是,对于一个有n个关键字的序列,需要进行n-1轮比较,第i轮需要比较n-i次;每次从低到高分别比较相邻的两个关键字,如果不满所要求的就将其交换;直到整个序列满足所要求的为止;
例如下面的代码:
#include<iostream.h>
#include<stdlib.h>
#include<malloc.h>
int *arr=NULL;
int number;
void sort()
{
int temp=0;
bool flag;
cout<<"输入数据的个数:"<<endl;
cin>>number;
arr=(int *)calloc(number,sizeof(int));//动态分配内存
if(arr==NULL){cout<<"内存分配失败!"<<endl;exit(0);}
for(int i=1;i<=number;i++)
cin>>arr[i];
cout<<endl;
for(int i1=1;i1<=number-1;i1++)
{
flag=false;//
for(int i2=1;i2<=number-i1;i2++)
if(arr[i2]>arr[i2+1])
{temp=arr[i2];arr[i2]=arr[i2+1];arr[i2+1]=temp;flag=true;}
if(!flag)return;//
}
}
void main()
{
sort();//
cout<<"从小到大的顺序:"<<endl;
for(int i3=1;i3<=number;i3++)
cout<<arr[i3]<<" ";
cout<<endl;
}
若在某一趟排序中未发现气泡位置的交换,则说明待排序的无序区中所有气泡均满足轻者在上,重者在下的原则,因此,冒泡排序过程可在此趟排序后终止。为此,在下面给出的算法中,引入一个布尔量exchange,在每趟排序开始前,先将其置为FALSE。若排序过程中发生了交换,则将其置为TRUE。各趟排序结束时检查exchange,若未曾发生过交换则终止算法,不再进行下一趟排序。


4566

被折叠的 条评论
为什么被折叠?



