冒泡排序(Bubble Sort)
思路:
在需要排序的一组数中,将一个数与排在他之后的数依次进行比较,挑选出其中符合条件的数,再依次向后比较,以此类推。(此处若不理解,可先向下看)
步骤(从小到大排序为例):
1.建立数组,假使数组a[]有n个顺序紊乱的数。
2.先选出最小的数,将其赋予a[0],再选出第二小的数,将其赋予a[1],依次类推。
举例:选出最小的数:
取a[0],将其依次与a[1],a[2],a[3]……a[j],直到a[j]<a[0],再将a[j]与a[j]之后的数比较,直到找出比a[j]小的数,再将其与在其之后的数比较,直到数组最后一个数比较完,再将这时最小的数赋予a[0]。
同理,选出第二小的数:
取a[1],将其与之后的数比较,直到找出比a[1]小的数a[j],再把a[j]与之后的数比较,循环这一环节,直到数组最后一个数,再将最后找出来的那个数赋予a[1]。
3.有n个数,将重复n-1次步骤2.排序结束,直接输出即可。
数据实例:
数组数据:5,10,9,8,4.
第一次:4,5,10,9,8.
第二次:4,5,10,9,8.(5在第二位,而5又刚好是数组中第二小的数,所以顺序没变。)
第三次:4,5,8,10,9.
第四次:4,5,8,9,10.
算法实例:
#include<stdio.h>
int main()
{
int a[1000];
int n;//数组数据个数
int i, j;
int p;//a[p]用于储存数据
int t;//用于交换数据
while (scanf("%d", &n) != EOF)//应用与多组输入,作用是可以输入多组数据,不用一次一次编译
{
for (i = 0; i < n; i++)
scanf("%d", &a[i]);//输入数组数据,即需要排序的数
for (i = 0; i < n; i++)
{
p = i;
for (j = i + 1; j < n; j++)
{
if (a[p] > a[j]) p = j;
}
if (p != i) { t = a[i]; a[i] = a[p]; a[p] = t; }
}
for (i = 0; i < n; i++)
printf("%d ", a[i]);
printf("\n");
}
return 0;
}