#include <stdio.h>
int main(int argc, char **argv)
{
int input = 0;
int i = 0;
int arr[100]; // 最多可以存储100个int类型的数据.
printf("请输入多个数字(输入字母则退出)\n");
while (scanf("%d", &input) == 1) // 对输入的数进行判断是否符合类型,不符合则退出循环
{
arr[i] = input;
i++; // i可以用来表示数组的长度,也就是你输入了几个数字
while (getchar() != '\n'); // 清除缓冲区
}
printf("输出了%d个数\n", i);
printf("你输入的数组是:\n");
for (int k = 1; k < i; k++)//遍历数组
{
printf("%d,", arr[k - 1]);
if (k == i - 1)//当遍历到最后一个数时,进行最后一个数的打印并进行换行操作
{
printf("%d\n", arr[k]);
printf("\n");
}
}
for (int j = 0; j < i - 1; j++) //冒泡排序
{
for (int k = 0; k < i - 1 - j; k++)
{
if (arr[k] > arr[k + 1])
{
int temp = arr[k];//数据调换,在后面的大数与前面的小数进行调换
arr[k] = arr[k + 1];
arr[k + 1] = temp;
}
}
}
printf("增序后的数组是:\n");
for (int k = 1; k < i; k++)//再次遍历数组
{
printf("%d,", arr[k - 1]);
if (k == i - 1)
{
printf("%d\n", arr[k]);
printf("\n");
}
}
return 0;
}
冒泡排序是一种简单的排序算法,它重复地遍历要排序的列表,一次比较两个元素,如果它们的顺序错误就把它们交换过来。遍历列表的工作是重复地进行直到没有需要交换,也就是列表已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端。
清空输入缓冲区:当我们从用户输入中读取数据时,有时可能会遇到输入缓冲区中还有残留的数据,这可能会导致程序出现错误。为了清除输入缓冲区中的数据,可以使用
scanf
函数前加上一个空格字符来吸收缓冲区中的换行符。