【C语言】输入 n 个整数按照升序排序,并输出排序后的结果

本文详细介绍了使用C语言编写的插入排序算法,包括insert和insertsort函数的逻辑,以及在main函数中如何读取用户输入并应用排序的过程。
摘要由CSDN通过智能技术生成

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 个整数,分别是 3142 和 5,排序后的结果是 1234 和 5,按照升序排列。

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值