我们由一个问题引入对插入法的介绍:我们希望在一个数组中插入任意指定的一个数,要求这个数能依照大小顺序插入到正确的位置。

这个问题是一个非常好的插入法例子,在问题中,我们需要考虑两个问题,其一是如何在数组空间足够时插入元素,其二是如何保证插入到的地方满足大小关系。

对数组的处理,由于数组元素的繁多,我们无疑会考虑到循环语句。对于这个问题,for循环语句和while循环语句都可以解决问题,但通过while循环语句设计出来的程序将会更为简洁巧妙。

先考虑for循环,在循环中,我们要让所有比插入的数大的往后挪一位,这之中最接近被插入数的数原来的位置就是应该插入的位置,而小于被插入数的位置不需要哦改变。
这一代码片如下:

for(i=0;i<10;i++)if(a[i]>number)break;//先由小到大循环,找出第一个比输入值大的,从而确定插入位置printf("%d\n",i);//只要比插入值小就照常输出for(j=10;j>i;j--)//从大到小循环,循环到之前确定的位置结束,这一循环体中的每一个数组元素都向后移动一位。a[j]=a[j-1];a[i]=number;

在这个问题中for循环的使用显然不及while循环简便,让我们来看看使用while循环时如何处理这个问题的。
考虑while循环,我们把程序完整的写一下。
代码如下:

#include "stdio.h"
int main()
{int a[11]={1,4,6,9,13,16,19,28,40,100};int number,i,j;printf("original array is:\n");for(i=0;i<10;i++)printf("%5d",a[i]);//输出初始值 printf("\n");printf("insert a nwe number: ");scanf("%d",&number);//输入要插入的数 j=9;//让j=9是因为数组中有十个元素a[9]要是最后一个元素,否则在后续操作中会将数组元素覆盖掉 while(j>=0 && a[j]>number){a[j+1]=a[j];j--;}a[j+1]=number;//这个while循环的判断语句作用是让所有比number值大的数组元素都往后挪一位,当z自减到不满足循环条件处,便是应该插入该数的地方 for(i=0;i<11;i++)printf("%5d",a[i]);//输出结果 return 0;
}

相较于for循环,while循环只用了三行代码就解决了问题,在编写while循环时,难点在于初值的设定和对while循环结束后j值的清楚认识。这要求对while循环先判断后循环的概念熟悉理解。

运行结果如下:

C语言中插入法的应用相关推荐

  1. C语言中数组的排序算法详解——选择法、冒泡法、交换法、插入法、折半法

    选择法排序 选择法排序是指:如果要把一个数组从小到大排列,那么就从该数组中依次选择最小的数字来排序.从第一个数字开始,将第一个数字与数组中剩下数字中最小的那一个交换位置,然后将第二个数字与剩下数字中最 ...

  2. c语言排序算法插入法,C语言中冒泡法、选择法、插入法三种常见排序算法分析.doc...

    C语言中冒泡法.选择法.插入法三种常见排序算法分析.doc 一.冒泡法(起泡法) 算法要求用起泡法对10个整数按升序排序. 算法分析如果有n个数,则要进行n-1趟比较.在第1趟比较中要进行n-1次相邻 ...

  3. C语言 数组排序 – 插入法排序 - C语言零基础入门教程

    目录 一.简介 二.数组插入法排序原理 三.数组插入法排序实战 四.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.简介 经过前面的学习, ...

  4. long在C语言中是非法字符吗,C程序设计实践——实验指导

    一.课程的总体目标和具体要求 总体目标: 利用C语言和程序设计方法编制程序,借助计算机解决问题的基本能力.(支撑毕业能力要求1)独立解决文本处理.数学上的一些问题,编写较规范化的代码.(支撑毕业能力要 ...

  5. Go 知识点(19)— Go 语言中的野指针

    野指针是一种指向内存位置是不可知的指针,一般是由于指针变量在声明时没有初始化所导致的.在 Go语言中,布尔类型的零值为 false,数值类型的零值为 0,字符串类型的零值为 "", ...

  6. c语言中字符串数组的地址存放以及%s输出单个字符导致程序崩溃的问题

    代码 总结下c语言中字符串数组的地址存放问题 #include <iostream> using namespace std; #include<bits/stdc++.h>i ...

  7. 单片机c语言中的循环语句,单片机c语言教程:C51循环语句

    循环语句是几乎每个程序都会用到的,它的作用就是用来实现需要反复进行多次的操 作.如一个 12M 的 51 芯片应用电路中要求实现 1 毫秒的延时,那么就要执行 1000 次空语句 才能达到延时的目的( ...

  8. python调用什么函数实现对文件内容的读取_如何使用python语言中的方法对文件进行读写操作...

    在我们使用python语言中的文件时,可以使用open()方法打开文件,close()方法关闭文件,read()方法读取文件内容,write()方法写入内容到文件中.下面利用几个实例说明文件读写方法, ...

  9. 如何用C语言改变宏定义的大小,C语言中宏定义使用的小细节

    C语言中宏定义使用的小细节 #pragma#pragma 预处理指令详解 在所有的预处理指令中,#Pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作.#p ...

最新文章

  1. B站开源动漫画质修复模型,超分辨率无杂线无伪影,还是二次元最懂二次元
  2. android冒烟测试自动化,自动化冒烟测试脚本应当遵循的原则
  3. android 读取文件相关
  4. vmware workstation 安装 fedora9+ vmware tools血泪史啊
  5. 对VS2008生成智能win32程序简单理解
  6. sql查询中使用in和exits比较和区别
  7. Haproxy+Rabbitmq中的问题
  8. python 表格格式输出_简单介绍python输出列表元素的所有排列形式
  9. 51Nod 1593 公园晨跑(RMQ,ST表)
  10. E-Prime 2.0 用了一段时间出现警告信息无法编辑实验程序
  11. LAMP架构简介与概述 及服务安装
  12. aliplayer阿里云播放器直播及录播前端代码
  13. PyTorch使用多GPU并行训练及其原理和注意事项
  14. Quartz表达式详解
  15. https://www.cnblogs.com/1995hxt/p/5252098.html 看jar包源码
  16. python获取outlook邮件内容_Python3读取Outlook邮件并写入MySQL
  17. DNS是什么?工作原理、工作流程总结
  18. Git中HEAD和ORIG_HEAD指针指的是什么
  19. ​复盘共享经济2020:陷入艰难求生困境,转型能否拯救亏损怪圈
  20. 澳大利亚莫纳什大学推出公开漏洞奖励计划

热门文章

  1. python-json校验-jsonpath
  2. 想做价值数万的可视化图表?这款免费软件不能错过!
  3. 数据结构作业(校园导航系统)
  4. mysql表的基础操作: Create,,Retrieve,Update,Delete(大量示例)
  5. 国外服务器 ping值不稳定,服务器ping值不稳定是什么原因?
  6. python遇到错误跳过_python 如何跳过异常继续执行
  7. ARCore从零到一 (7) 用图片识别做AR卡片和书籍
  8. svg学习之svg动画
  9. 域名备案和域名实名认证相同吗?
  10. 考 PMP 证书真有用吗?