思路:数字排序方法有:冒泡排序法,选择排序法等,现在我们讲前者,它通过两层循环遍历数组,每次比较相邻的两个元素,如果前一个元素大于后一个元素,则交换它们的位置。这样,每一轮循环都会将当前未排序部分的最大元素移动到末尾。最终,数组就会按照从小到大的顺序排列。
假设有一个未排序的数组:[5, 3, 8, 6, 4, 2]
第一轮比较和交换:
- 比较:5 和 3,5 > 3,不交换。
- 比较:5 和 8,5 < 8,不交换。
- 比较:8 和 6,8 > 6,交换,得到 [5, 3, 6, 8, 4, 2]。
- 比较:6 和 4,6 > 4,交换,得到 [5, 3, 4, 6, 8, 2]。
- 比较:6 和 2,6 > 2,交换,得到 [5, 3, 4, 2, 6, 8]。
第二轮比较和交换:
- 比较:5 和 3,5 > 3,交换,得到 [3, 5, 4, 2, 6, 8]。
- 比较:5 和 4,5 > 4,交换,得到 [3, 4, 5, 2, 6, 8]。
- 比较:5 和 2,5 > 2,交换,得到 [3, 4, 2, 5, 6, 8]。
- 比较:5 和 6,5 < 6,不交换。
- 比较:5 和 8,5 < 8,不交换。
以此类推,经过多轮比较和交换,最终得到有序的数组。
在每一轮中,最大的元素会逐渐“浮”到数组的末尾。通过多次重复这个过程,直到整个数组都有序。
#include<stdio.h>
int main()
{
int a, b, c, d, e, i, j;
scanf("%d%d%d%d%d", &a, &b, &c, &d, &e);
int arr[5] = { a,b,c,d,e };
for (i = 0; i < 4; i++)
{
for (j = 0; j < 4 - i; j++)
{
if (arr[j] > arr[j + 1])
{
int t;
t = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = t;
}
}
}
for (i = 0; i < 5; i++)
{
printf("%d", arr[i]);
printf(" ");
}
return 0;
}
代码说明:
i代表轮次,j代表两个数之间的比较次数,a,b,c,d,e分别代表你想比较的数字。