1.源代码
#include "stdio.h"
#define N 10
void insert(int s[],int x,int n)//x表示待插入的数值,n表示数组中已有的数值的个数。
{ int i;
if(x>s[n-1])
s[n]=x;
else
{ for(i=n;i>0&&s[i-1]>x;i--)
s[i]=s[i-1];
s[i]=x;
}
}
void insertsort(int s[],int n)
{
int i;
for(i=0;i<n;i++){
insert(s,s[i],i);
}
}
int main()
{ int i,n,a[N];
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
insertsort(a,n) ;
for(i=0;i<n;i++)
printf("%4d",a[i]);
printf("\n");
return 0;
}
2.代码思路
#include "stdio.h"
是一个预处理指令,用于包含标准输入输出头文件,以便使用printf()
和scanf()
函数。#define N 10
是一个宏定义,用于定义一个常量N
,其值为10
,表示数组的最大长度。void insert(int s[],int x,int n)
是一个自定义函数,用于在一个已经排好序的整数数组中插入一个整数。它有三个参数:int s[]
是一个整数数组,用于存储已经排好序的数值。int x
是一个整数,用于表示要插入的数值。int n
是一个整数,用于表示数组中已有的数值的个数。
- 函数体中,首先判断
x
是否大于数组的最后一个元素s[n-1]
,如果是,就将x
存储到数组的最后一个位置s[n]
;如果不是,就从后往前遍历数组,找到第一个小于或等于x
的元素s[i-1]
,并将它后面的所有元素都向后移动一位,然后将x
存储到s[i]
的位置。 void insertsort(int s[],int n)
是一个自定义函数,用于对一个整数数组进行插入排序。它有两个参数:int s[]
是一个整数数组,用于存储要排序的数值。int n
是一个整数,用于表示数组中的数值的个数。
- 函数体中,使用一个
for
循环,从i = 0
到i < n
,每次循环中调用insert(s,s[i],i)
函数,将数组s
的第i
个元素s[i]
插入到前面已经排好序的子数组s[0..i-1]
中,从而保证数组s[0..i]
始终是有序的。 int main()
是程序的主函数,程序的执行从这里开始。- 函数体中,首先定义了一个长度为
N
的整数数组a
,以及两个整数变量i
和n
,用于表示循环的控制变量和要排序的数值的个数。 - 然后使用
scanf("%d",&n)
函数,从标准输入读取一个整数,赋值给n
,表示要排序的数值的个数。 - 接着使用一个
for
循环,从i = 0
到i < n
,每次循环中使用scanf("%d",&a[i])
函数,从标准输入读取一个整数,存储到数组a
的第i
个位置。 - 然后调用
insertsort(a,n)
函数,将数组a
和它的长度n
作为参数传递,函数会对数组a
进行插入排序。 - 最后使用一个
for
循环,从i = 0
到i < n
,每次循环中使用printf("%4d",a[i])
函数,打印排序后的数组a
的第i
个元素,中间用四个空格分隔。打印完毕后,再使用printf("\n")
函数,输出一个换行符。然后使用return 0
语句,结束主函数。
一个可能的输出样例是:
输入:5
输入:3
输入:1
输入:4
输入:2
输入:5
输出: 1 2 3 4 5
这表示用户输入了 5
个整数,分别是 3
、1
、4
、2
和 5
,排序后的结果是 1
、2
、3
、4
和 5
,按照升序排列。