冒泡排序的思想是依次比较数组中紧邻的两个元素,大的往前面挪,小的往后面挪,待一轮这样的比较结束最大的元素肯定就是最后一个元素了,所以下一轮比较的元素树会递减一个。这样归纳的出n个元素第一轮n-1此比较,第二轮n-2此比较。。。,到最后我们得出第i轮比较就需要n-i此两两比较。而n个元素比较需要n-1轮,所以两层for循环就可以写出这个排序算法:
#include <stdio.h>
void PrintArray(int a[], int arr_len)
{
int i;
for(i=0;i<arr_len;i++)
{
printf("%d ",a[i]);
}
}
void BubbleSort(int a[], int arr_len)
{
int i,j,temp;
for(i=1;i<arr_len;i++)
{
for(j=0;j<arr_len-i;j++)
{
if(a[j]>a[j+1])
{
temp = a[j+1];
a[j+1] = a[j];
a[j] = temp;
}
}
printf("第%d次冒泡排序结果是:", i);
PrintArray(a, arr_len);
printf("\n");
}
}
int main()
{
int a[]={23,12,98,33,1,111,76,59,64,19,32};
int arr_len=sizeof(a)/sizeof(a[0]);
BubbleSort(a, arr_len);
printf(" 冒泡排序后的结果是:");
PrintArray(a, arr_len);
return 0;
}
冒泡排序第一轮结果图:
运行上面的代码可以看到运行结果第一轮冒泡排序和我们预想的一样: