C语言实现冒泡排序
冒泡排序应该是最常见的排序方法了,非计算机专业的在数学里也应该听过这个方法。
冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。
下面就展示如何用C语言实现冒泡排序。
第一种
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a[10] = { 5,12,3,23,1,6,7,66,20,9 };
int t = 0;
for (int i = 0; i < 9; i++) //注意这里只需要i<9,因为每次是两个数作比较,只需要循环9次
{
for (int j = 0; j < 10-1-i ; j++) //每执行一次循环把最大的数放在最后,就会少一个数参与比较
{
//如果前面的变量大于后面的,交换位置
if (a[j] > a[j + 1])
{
t = a[j]; //用中间变量交换数组两个位置的值
a[j] = a[j + 1];
a[j + 1] = t;
}
}
}
//按从小到大顺序输出数组
for (int q = 0; q < 10; q++)
{
printf("%d\n", a[q]);
}
system("pause");
return 0;
}
第二种
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a[10] = { 5,12,3,23,1,6,7,66,20,9 };
for (int i = 0; i < 9; i++) //这里i<9的原因同上
{
int t = i;
for (int j = i + 1; j < 10; j++) //j从i+1开始,因为这次的方法是把最小的放在前面,循环一次找到最小数后,找出的数就不再参与下一次循环
{
if (a[t] > a[j]) //循环一遍找到最小数的数组下标
{
t = j;
}
}
if (i != t) //如果下标与循环初始不一样,交换
{
int temp = a[i];
a[i] = a[t];
a[t] = temp;
}
}
for (int q = 0; q < 10; q++)
{
printf("%d\n", a[q]);
}
system("pause");
return 0;
}
下面与上一个思想是一样的,只是输出没有另外建一个循环,并且多了一次无意义的比较
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a[10] = { 5,12,3,23,1,6,7,66,20,9 };
int t = 0;
for (int i = 0; i <=9; i++)
{
for (int j = i + 1; j <= 9; j++)
{
if (a[i] > a[j])
{
t = a[i];
a[i] = a[j];
a[j] = t;
}
}
printf("%d ", a[i]);
}
system("pause");
return 0;
}