冒泡排序
题目
有一个长度为6的无序数组,按照从小到大的顺序排序后输出
例:输入: 1 6 3 4 2 5
输出:1 2 3 4 5 6
思路
1、将数组第 1 个数和数组第 2 个数进行比较,如果第 1 个数大于第 2 个数就交换两个数的位置
1、将数组第 2 个数和数组第 3 个数进行比较,如果第 2 个数大于第 3 个数就交换两个数的位置
3、…
例:输入: 1 6 3 4 2 5
1、先将 1 和 6 进行比较,1<6,不改变位置,此时序列为 1 6 3 4 2 5
2、将 6 和 3 进行比较,6>3,交换,此时序列为 1 3 6 4 2 5
3、将 6 和 4 进行比较,6>4,交换,此时序列为 1 3 4 6 2 5
4、将 6 和 2 进行比较,6>2,交换,此时序列为 1 3 4 2 6 5
5、将 6 和 5 进行比较,6>5,交换,此时序列为 1 3 4 2 5 6,6像冒泡一样到最后一位
6、回到开头,将 1 和 3 进行比较,1<3,不改变位置,此时序列为 1 3 4 2 5 6 ,注意这里比较时只用比较前6位,因为最大的6已经在最后了
7、…
代码
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void sort(int a[], int n)
{
int i = 0;
int j = 0;
int temp = 0;
for (i = 0; i < n - 1; i++)
{
for (j = 0; j < n - 1 - i; j++)
{
if (a[j] > a[j + 1])
{
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
}
int main()
{
int x[6] = { 0 };
int i = 0;
int j = 0;
int k = 0;
for (i = 0; i < 6; i++)
{
scanf("%d", &x[i]);
}
printf("输入的序列为:");
for (j = 0; j < 6; j++)
{
printf("%d ", x[j]);
}
printf("\n");
sort(x, 6);
printf("输出的序列为:");
for (k = 0; k < 6; k++)
{
printf("%d ", x[k]);
}
return 0;
}