插入排序
描述
给出若干个数,将数字存储在数组中,然后使用插入排序,按照升序排列输出数字。
输入一个整数n表示有n个数,接着输入这n个数。
按照升序输出这n个数。
输入输出示例
样例一 输入 输出
5 2 3 4 4 5
3 2 4 5 4
解决这道题,用数组会更加简便,所以采用遍历数组的方法把值赋给每一个数
scanf("%d", &N);
int a[100];
for ( i = 0; i < N; i++) {
scanf("%d", &a[i]);
}
解决完第一步之后难点就来了,如何将数组中看似没有任何关系的数进行排序。如果将数组中的数与前一位数进行比较,根据比较结果将数字的位置进行交换,是可以达到效果的。
int temp,j;
for(i=1;i<N;i++){
j=i-1;//从第一个数开始比较
temp=a[i];
while(a[j]>temp&&j>=0){
a[j+1]=a[j];
j--;//从当前位数向前比较
}
a[++j]=temp;//保留被改变的数
}
最后将排列完的数输出:
for(i=0;i<N;i++){
printf("%d",a[i]);
最后代码如下:
#include <stdio.h>
int main()
{
int k,x,N,i;
scanf("%d",&N);
int a[100];
for(i=0;i<N;i++){
scanf("%d",&a[i]);
}
int temp,j;
for(i=1;i<N;i++){
j=i-1;
temp=a[i];
while(a[j]>temp&&j>=0){
a[j+1]=a[j];
j--;
}
a[++j]=temp;
}
for(i=0;i<N;i++){
printf("%d",a[i]);
if(i<N-1)
printf(" ");
}
printf("\n");
return 0;
}