冒泡法排序在刚学编程语言的时候都经常接触,当刚接触时总是很疑惑,明明感觉自己掌握了,过了一阵子感觉又不会了,其实冒泡的原理很简单,自己动手排序一次,就能体验到冒泡如何的冒泡,但数组的个数不要太多。冒泡法对一个数组进行排序,里面的数据可以有相同也有不相同,同时实现冒泡的时候用到双重循环,第一个for循环是用来控制排序要跑的趟数,比如说你的数组只有一个数据,那还用排序吗??如果N个数据那就要减去那个数据本身了,所以N个数据就要跑N-1趟,每一趟又要进行比较,第二个for是控制每一趟比较的次数,比如第一趟要比较的次数为N-1,第二趟N-2,只要理解两个for的作用容易掌握了。
#include <stdio.h>
#define N 10
void BubbleArr(int *a, int len) //冒泡法排序
{
int i, j, temp;
for(i=0; i<len-1; i++) //比较的趟数,1个数时就不用比较,N个数就要比较N-1趟
{
for(j=0; j<len-1-i; j++) //每一趟中要比较的次数
{
if(a[j]>a[j+1]) //当前面的那个数比后面的那个数大时交换,跑完一趟时,要比较个数就减少1个
{ //跑完一趟最后一个数就不用比较了,比较的个数也就比以前少一个了
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
}
void PrintArr(int *a, int len) //打印数组
{
for(int i=0; i<len; i++)
{
printf("%d ",a[i]);
}
printf("\n");
}
void main()
{
int a[N] = {1, 2, 5, 3, 7, 8, 0, 4, 6, 9}; //初始化一个数组
printf("为进行排序前的数组:\n");
PrintArr(a, N);
printf("进行排序后的数组:\n");
BubbleArr(a, N);
PrintArr(a, N);
}
if(a[j]>a[j+1])关系运算符可以>=或<等,看你的数据是否有相同或者升序降序。