实现思路
冒泡排序是一种简单的排序算法
实现思路是重复比较相邻元素,顺序错误则交换,使较大元素逐渐“浮”到数组末端
5 3 8 1 2 → 比较5和3 → 交换 → [3,5,8,1,2]
3 5 8 1 2 → 比较5和8 → 不交换 → [3,5,8,1,2]
3 5 8 1 2 → 比较8和1 → 交换 → [3,5,1,8,2]
3 5 1 8 2 → 比较8和2 → 交换 → [3,5,1,2,8]
每次排序将相邻的两个数进行排序,一直到末尾,每次排序时会将整个数列进行一次比较
因为每次排序都会将最大的值“浮”至末尾,所以在实现的时候可以将排序次数随着最大值“浮”起的次数依次减少,从而不用每次排序都将每个数都进行排序,减少运行成本
冒泡算法的实现
#include<stdio.h>
void maopao(int a[],int z) { //接收要排序的数和数组的元素个数
int i = 0;
int folg = 1; //进行判断是否已经有序,避免进行无效的运行
for (i = 0; i < z - 1; i++) { //j表示元素的下标,通过for循环的递增来实现数组的逐位判断
int j = 0;
for (j = 0; j < z - 1; j++) {
folg = 0; //发⽣交换赋予0,表示数还是无序的
if (a[j] > a[j + 1]) { //进行判断是否需要进行交换
int c = a[j];
a[j] = a[j + 1]; //进行交换
a[j + 1] = c;
}
}
if(folg == 1) //发生交换会被赋予0,当为有序时
//则不会执行赋予0的语句,就会跳出代码
{
break;
}
}
}
int main() {
int a[] = {2,4,1,3,7,5,6,8,9 };
int z = sizeof(a) / sizeof(a[0]);//计算数组元素个数
maopao(a,z); //将要排序的元素和元素个数传入该函数内进行排序
for (int f = 0; f < z; f++) {
printf("%d ", a[f]); //将排序完的数组依打印出来
}
return 0;
}