学了这么久的C语言发现C语言的算法非常的多,特别是排序算法,在编程中的应用非常广泛,如:冒泡排序、选择排序、希尔排序 等等,
今天向大家介绍排序中的一种最基本的排序,“冒泡排序”
冒泡排序是排序中非常基本的排序,也是非常重要的排序
因为排序时像水泡一样一个一个向上冒故此得名
基本思想:
将下面的数据按照从小到大的顺序排列
27 36 32 18 5
排序前:
27 | 36 | 32 | 18 | 5 |
第一趟:
第1次:27<36不变
27 | 36 | 32 | 18 | 5 |
第2次:36>32交换
27 | 32 | 36 | 18 | 5 |
第3次:36>18交换
27 | 32 | 18 | 36 | 5 |
第4次:36>5交换
27 | 32 | 18 | 5 | 36 |
第二趟:
第1次:27<32不变
27 | 32 | 18 | 5 | 36 |
第2次:32>18交换
27 | 18 | 32 | 5 | 36 |
第3次:32>5交换
27 | 18 | 5 | 32 | 36 |
第三趟:
第1次:27>18交换
18 | 27 | 5 | 32 | 36 |
第2次:27>5交换
18 | 5 | 27 | 32 | 36 |
第四趟:
第1次:18>5交换
5 | 18 | 27 | 32 | 36 |
排序后的结果:
5 18 27 32 36
算法代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a[] = { 27, 36, 32, 18, 5};
int temp;//中间变量
int i, j;//用于for循环
printf("排序前的数据:");
for (i = 0; i < sizeof(a) / sizeof(int); i++)//打印排序前的数据
{
printf("%d ", a[i]);
}
printf("\n");//换行
for (i = 0; i< sizeof(a) / sizeof(int) - 1; i++)//排序的趟数
{
for (j = 0; j < sizeof(a) / sizeof(int) - i - 1; j++)//每趟的次数
{
if (a[j]>a[j + 1])//当后一个数小于前一个数时
{
temp = a[j];//交换两个数
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
printf("\n排序后的数据:");
for (i = 0; i < sizeof(a) / sizeof(int); i++)//打印排序后的数据
{
printf("%d ", a[i]);
}
printf("\n\n");//换行
system("pause");
}
执行结果: