前言
本文以升序(从小到大)排序为例。
三个整数进行排序
此处用到if语句来实现,程序如下:
#include<stdio.h>
int main()
{
int a, b, c,t;
printf("请输入三个整数:");
scanf("%d %d %d", &a, &b, &c);
if (a > b)
{
t = a;
a = b;
b = t;
}
if (a > c)
{
t = a;
a = c;
c = t;
}
if (b > c)
{
t = b;
b = c;
c = t;
}
printf("按从小到大顺序输出为:%d %d %d", a, b, c);
return 0;
}
将三个数两两比较大小,若第一个数大于第二个数则两数交换,即将大的数放在后面的位置。
n个整数进行排序
此处用到冒泡排序,程序如下:
#include<stdio.h>
#define N 10
void Input(int b[N])
{//输入函数
int i;
printf("请输入%d个整数: \n", N);
for (i = 0; i < N; i++)
{
scanf("%d", &b[i]);
}
}
void BubbleSort(int b[N])
{//冒泡排序函数
int i, j, t;
for (i = 0; i < N - 1; i++)
{//外层循环控制趟数
for (j = 0; j < N - 1 - i; j++)
{//内层循环控制趟数
if (b[j] > b[j + 1])
{
t = b[j];
b[j] = b[j + 1];
b[j + 1] = t;
}
}
}
}
void Print(int b[N])
{//输出函数
int i;
for (i = 0; i < N; i++)
{
if (i % 10 == 0)
printf("\n");
printf("%6d", b[i]);
}
printf("\n");
}
int main()
{
int a[N];
Input(a);
printf("排序前:");
Print(a);
BubbleSort(a);
printf("排序后:");
Print(a);
return 0;
}
运行结果如下:
排序过程:将N个数放在数组a[N]中。
先对a[0]、a[1]进行比较,若a[0]比a[1]大,就把二者交换,即将大数放在a[1]中;再对a[1]、a[2]进行比较,并将大数放在a[2]中;如此进行下去,这样比较一轮,便将最大数放入了a[N-1]中。
再对a[0]、a[1]、···、a[N-2]用同样的方法进行比较,将它们中最大的数放入a[N-2]中。
如此进行下去,便可将N个数由小到大进行排序。
- 整个排序过程共进行了N-1遍。
- 第i遍共比较N-i次。
- 每次比较后,需根据比较结果,决定是否交换两数的位置。
- 需使用两重循环控制整个排序过程,外层循环控制排序的遍数,内层循环控制每一遍的比较次数。
最后附上视频链接:冒泡排序视频解析