冒泡排序是数组的一个应用
冒泡排序——
以升序排序为例冒泡排序的思想:相邻元素两两比较,将较大的数字放在后面,直到将所有数字全部排序。
题目——【来源于慕课网】班级成绩中,老师把前十名的挑出来了,用冒泡排序把分数排序
//展示每一次变化的过程
#include <stdio.h>
int main()
{
int arr[] = {94,95,93,96,30,59,02,34,32,43};
int i,j;
int p;
for(i=0;i<10;i++)
{
printf("%d ",arr[i]);
}printf("\n \n");
for(i=8;i>=0;i--)
{
for(j=0;j<=i;j++)
{
if(arr[j]>arr[j+1])
{
int temp;
temp = arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
for(p=0;p<10;p++){
printf("%d ",arr[p]);
}
printf("\n");
}
}
printf("\n排序之后\n");
for(i=0;i<10;i++)
{
printf("%d ",arr[i]);
}
}
得到的结果是
//每一次左边重头再来 右边变已经逐渐开始满足
94 95 93 96 30 59 2 34 32 43 //对整个数组遍历输出
94 95 93 96 30 59 2 34 32 43 //a[0]不满足条件 不动
94 93 95 96 30 59 2 34 32 43 //a[1]满足条件
94 93 95 96 30 59 2 34 32 43
94 93 95 30 96 59 2 34 32 43 //a[1]满足条件
94 93 95 30 59 96 2 34 32 43
94 93 95 30 59 2 96 34 32 43
94 93 95 30 59 2 34 96 32 43
94 93 95 30 59 2 34 32 96 43
94 93 95 30 59 2 34 32 43 96
//最高位96第一次确认
93 94 95 30 59 2 34 32 43 96
93 94 95 30 59 2 34 32 43 96
93 94 30 95 59 2 34 32 43 96
93 94 30 59 95 2 34 32 43 96
93 94 30 59 2 95 34 32 43 96
93 94 30 59 2 34 95 32 43 96
93 94 30 59 2 34 32 95 43 96
93 94 30 59 2 34 32 43 95 96
//最高位96第一次确认
93 94 30 59 2 34 32 43 95 96
93 30 94 59 2 34 32 43 95 96
93 30 59 94 2 34 32 43 95 96
93 30 59 2 94 34 32 43 95 96
93 30 59 2 34 94 32 43 95 96
93 30 59 2 34 32 94 43 95 96
93 30 59 2 34 32 43 94 95 96
30 93 59 2 34 32 43 94 95 96
30 59 93 2 34 32 43 94 95 96
30 59 2 93 34 32 43 94 95 96
30 59 2 34 93 32 43 94 95 96
30 59 2 34 32 93 43 94 95 96
30 59 2 34 32 43 93 94 95 96
30 59 2 34 32 43 93 94 95 96
30 2 59 34 32 43 93 94 95 96
30 2 34 59 32 43 93 94 95 96
30 2 34 32 59 43 93 94 95 96
30 2 34 32 43 59 93 94 95 96
2 30 34 32 43 59 93 94 95 96
2 30 34 32 43 59 93 94 95 96
2 30 32 34 43 59 93 94 95 96
2 30 32 34 43 59 93 94 95 96
2 30 32 34 43 59 93 94 95 96
2 30 32 34 43 59 93 94 95 96
2 30 32 34 43 59 93 94 95 96
2 30 32 34 43 59 93 94 95 96
2 30 32 34 43 59 93 94 95 96
2 30 32 34 43 59 93 94 95 96
排序之后
2 30 32 34 43 59 93 94 95 96
--------------------------------
Process exited after 3.13 seconds with return value 3
请按任意键继续. . .
研究一下其中最关键的代码部分
for(i=8;i>=0;i--) \\控制每行比较的最大下标
\\第一行结束的时候a[9]已经是确定的了
{
for(j=0;j<=i;j++) \\控制每次相邻元素比较的下标
{
if(arr[j]>arr[j+1]) \\判断并交换
{
int temp;
temp = arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}