冒泡排序:将每个数据元素看作是有重量的气泡,根据轻气泡不能在重气泡之下的原理,从上行下扫描数组,凡违反规则的轻气泡向上“漂浮”,重气泡向下”沉淀”,如此反复直到全部排成有序的队列为止
请对数组元素赋值:23 14 40 -16 56 8 0 -90 12 10
排序前的数组:23 14 40 -16 56 8 0 -90 12 10
第1趟:交换7次 第2趟:交换6次
第3趟:交换6次 第4趟:交换5次
第5趟:交换3次 第6趟:交换1次
第7趟:交换1次 第8趟:交换0次
第9趟:交换0次
一共交换29次
#include "iostream"
using namespace std;
int main()
{
const int num = 10;
int i, j, temp, a[num];
cout << "请输入" << num << "个整数:" << endl;
for (i = 0; i < num; i++)
{
cin >> a[i];
}
cout << "排序前数组元素的值是:";
for (i = 0; i < num; i++)
{
cout << a[i] << " ";
}
cout << endl;
for (i = 0; i < num ; i++)
{
for (j = 0; j < num - 1 ; j++)
if (a[j]>a[j + 1])
{
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
cout << "排序后的数组元素的值是: ";
for (i = 0; i < num; i++)
{
cout << a[i] << " ";
}
cout << endl;
system("pause");
return 0;
}
经过改进后的程序:
在排序过程中,执行完最后的排序后,虽然数据已全部排序完毕,但程序无法判断是否完成排序,为了解决这一不足,可设置一个标志单元flag,将其设置为OFF,表示被排序的表示是一个无序的表。在每一排序开始时,检查此标志,若此标志为0,则结束排序;否则进行排序;
#include “stdio.h”
void main( )
{int a[10], t , i ,j,flag;
for( i=0; i<10; i++) /*输入数据*/
cin>>a[i];
for( i=1; i<=9; i++) /*排序*/
{flag=0;
for( j=0; j<=10-i; j++)
if( a[j]>a[j+1] )
{t=a[j];a[j]=a[j+1];a[j+1]=t;flag=1}
if( flag==0) break;
}
for( i=0; i<10; i++) /*输出数据*/
cout<<a[i]<<“ “;
}