最原始的起泡排序实现代码如下:
-
void BubbleSort1(int a[],int n)
-
{
-
int i,j;
-
for(i=1;i<n;i++)
-
{
-
for(j=0;j<n-i;j++)
-
{
-
if(a[j]>a[j+1])
-
{
-
swap(a[j],a[j+1]);
-
}
-
}
-
}
- }
代码如下:
-
int BubbleSort2(int a[],int n)
-
{
-
int j,k;
-
bool flag;
-
k=n;
-
flag=true;
-
while(flag)
-
{
-
flag=false;
-
for(j=0;j<k-1;j++)
-
{
-
if(a[j]>a[j+1])
-
{
-
swap(a[j],a[j+1]);
-
flag=true;
-
}
-
}
-
k--;
-
-
}
-
return n-k;
- }
优化2:再做进一步的优化。如果有100个数的数组,仅前面10个无序,后面90个都已排好序且都大于前面10个数字,那么在第一趟遍历后,最后发生交换的位置必定小于10,且这个位置之后的数据必定已经有序了,记录下这位置,第二次只要从数组头部遍历到这个位置就可以了。
代码如下:-
void BubbleSort3(int a[],int n)
-
{
-
int j,k;
-
int flag;
-
-
flag=n;
-
while(flag>0)
-
{
-
k=flag;
-
flag=0;
-
for(j=0;j<k-1;j++)
-
{
-
if(a[j]>a[j+1])
-
{
-
swap(a[j],a[j+1]);
-
flag=j+1;
-
}
-
}
-
-
}
- }
完整的测试代码如下:
-
#include<iostream>
-
using namespace std;
-
-
-
void swap(int *a,int *b)
-
{
-
*a=*a^*b;
-
*b=*b^*a;
-
*a=*a^*b;
-
-
}
-
-
void BubbleSort3(int a[],int n)
-
{
-
int j,k;
-
int flag;
-
-
flag=n;
-
while(flag>0)
-
{
-
k=flag;
-
flag=0;
-
for(j=0;j<k-1;j++)
-
{
-
if(a[j]>a[j+1])
-
{
-
swap(a[j],a[j+1]);
-
flag=j+1;
-
}
-
}
-
-
}
-
}
-
-
int main()
-
{
-
int a[8];
-
printf("please input the number:\n");
-
for(int i=0;i<8;i++)
-
scanf("%d",&a[i]);
-
BubbleSort(a,8);
-
for(i=0;i<8;i++)
-
cout<<a[i]<<" ";
-
cout<<endl;
-
return 0;
-
- }