#include<stdio.h>
#include<math.h>
int main()
{
int arr[10] = { 22,12,44,34,67,55,78,88,97,6 };
int i, j, k;
int tepm;
int sz = sizeof(arr)/sizeof (arr[0]);
printf("sz=%d\n", sz);//输出数组arr[]里面元素的个数
for (i = 1; i < sz; i++)//此时i最大为9,i为对比的趟数
{
for (j = 0; j < sz - i; j++)//j为每趟对比的次数
{
if (arr[j] > arr[j + 1])
{
tepm = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tepm;
}
}
printf("%d:::", i);//打印输出的趟数i,便于观察
for (k = 0; k < sz; k++)
{
printf("%d ", arr[k]);
}
printf("\n");
}
}
为了提高运行效率,我们可以进行改进,加入一个标识
#include<stdio.h>
#include<math.h>
int main()
{
int arr[10] = { 22,12,44,34,67,55,78,88,97,6 };
int i, j, k, flag;
int tepm;
int sz = sizeof(arr)/sizeof (arr[0]);
printf("sz=%d\n", sz);//输出数组arr[]里面元素的个数
for (i = 1; i < sz; i++)
{
flag = 1;//引入一个标识
for (j = 0; j < sz - i; j++)
{
if (arr[j] > arr[j + 1])
{
tepm = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tepm;
flag = 0;//进入这个if循环后,flag的值变为1,说明此时还没有排序好
}
}
if (flag == 1)
{
break;
}
printf("%d:::", i);
for (k = 0; k < sz; k++)
{
printf("%d ", arr[k]);
}
printf("\n");
}
}