一,问题:从键盘上输入十个元素,并对其排序;
二,思考:十个元素的排序可以简化成“两数排序”;
(1)对于“两数交换”,我们往往会加入第三变量来将两数进行数据交换;
如:例子
int a=3,b=6;
//为了输出时是a=6,b=3,则:
int temp=0;
temp=a;//交换后:a=0,temp=3;
a=b;//交换后:a=6,b=0;
b=temp;//交换后:temp=0,b=3;
printf("a=%d,b=%d",a,b);
(2)而排序则只用加上一个比较就行,“if语句”:(这是升序的写法)
int a=6,b=3;
int temp=0;
if(a>b)
{
temp=a;
a=b;
b=temp;
}
printf("max=%d",b);
三,实现
(1)则同理的,实现“十数排序”也就可以通过for循环来实现了;
/*外部控制比较的趟数,趟数要比数组长度少1,因为每一趟都会选出一个大的数并且定序,到倒数第二次比完后,自动出最后一个,所以趟数要少1*/
for (int i = 0; i < 9; i++)
{
for (int j = 0; j < 9 - i; j++)//内部循环控制一趟里面“两数排序”的次数,每一趟都会产生一个最大数并从末尾往前定序
{
if (arr[j] > arr[j + 1])
{
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
(2)接下来接将数组正序输出即可
printf("排序后:");
for (int k2 = 0; k2 < 10; k2++)
{
printf("%d ", arr[k2]);
}
四,代码加运行
#include<stdio.h>
int main()
{
int arr[10]={0};
printf("请输入10个数字:\n");
for (int i = 0; i < 10; i++)
{
scanf_s("%d", &arr[i]);
}
printf("排序前:");
for (int k1 = 0; k1 < 10; k1++)
{
printf("%d ", arr[k1]);
}
printf("\n");
for (int i = 0; i < 9; i++)
{
for (int j = 0; j < 9 - i; j++)
{
if (arr[j] > arr[j + 1])
{
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
printf("排序后:");
for (int k2 = 0; k2 < 10; k2++)
{
printf("%d ", arr[k2]);
}
return 0;
}