例22  插入排序

问题描述php

排序是计算机程序设计中的一种重要操做,它的功能是将一个数据元素或记录的任意序列,从新排列成一个以关键字递增(或递减)排列的有序序列。算法

排序的方法有不少,简单插入排序就是一种简单的排序算法。编程

插入排序的基本思想是顺序将一个待排序的记录按其关键字值的大小插入到一个有序的序列中,插入后该序列仍然是有序的。数组

简单插入排序是一种最简单的排序方法。它的排序过程为:先将待排序序列中第1个记录当作是一个有序的子序列,而后从第2个记录起依次逐个地插入到这个有序的子序列中去。这很像玩扑克牌时一边抓牌一边理牌的过程,抓一张牌就插入到其应有的位置上去。网站

简单插入排序的排序过程以下图1所示。图1中方括号[ ]中为已排好序的记录关键字的子序列,下划线的关键字表示当前插入到有序子序列中的记录。this

图1  简单插入排序的排序过程示例spa

编写一个程序,用简单插入排序方法将输入的N个整数按从小到大的顺序排列输出。设计

输入格式blog

第一行是一个正整数N (1 ≤ N ≤ 100000),表明数组中元素的个数。排序

第二行有N个整数,表示待排序的N个数组元素。

输出格式

一行,有N个整数,这N个整数按从小到大的顺序排列输出。

输入样例

10

7 2 5 4 9 6 3 10 1 8

输出样例

1 2 3 4 5 6 7 8 9 10

(1)编程思路。

将整个数组(n个元素)当作是由有序的(a[0],…,a[i-1])和无序的(a[i],…,a[n-1])两个部分组成;初始时i等于1,每趟排序时将无序部分中的第一个元素a[i]插入到有序部分中的恰当位置,共需进行n-1趟,最终使整个数组有序。

排序操做是一个二重循环,外循环控制排序趟数(1~n-1),内循环在有序部分中寻找当前元素a[i]的插入位置。

(2)源程序。

#include

#define N 50001

int main()

{

int a[N];

int n,i;

scanf("%d",&n);

for (i=0;i

scanf("%d",&a[i]);

for (i=1; i

{

int t=a[i];

int j= i-1;

while (j>=0 && t

{

a[j+1] = a[j];

j--;

}

a[j+1] = t;

}

for (i=0;i

printf("%d ",a[i]);

printf("\n");

return 0;

}

上面介绍了简单插入排序,下面再介绍两种简单的排序算法:直接选择排序法和冒泡排序法。

(3)直接选择排序。

直接选择排序也是一种比较简单的排序方法,它的排序过程为:先从待排序的全部记录中选出关键字最小的记录,把它与原始序列中的第一个记录交换位置;而后再从去掉了关键字最小的记录的剩余记录中选出关键字最小的记录,把它与原始序列中第二个记录交换位置;依次类推,直至全部的记录成为有序序列。直接选择排序的排序过程如图2所示。图中方括号[ ]中为已排好序的记录关键字的子序列,下划线的关键字表示它对应的记录对须要交换位置。

图2  直接选择排序的排序过程示例

编写一个程序,用直接选择排序方法将输入的十个整数按从小到大的顺序排列输出。

1)编程思路。

直接选择排序的过程是一个二重循环,外循环(i)控制排序趟数(0~n-2),内循环(j)寻找序列a[i]~a[n-1]中的最小者。

寻找一个序列最小值的方法是:先假定序列的第一个元素是最小值,而后将序列的第2个元素至最后一个元素依次和这个最小值比较,若是某个元素比最小值要小,则最小值就是这个元素。

2)源程序。

#include

#define N 50001

int main()

{

int a[N];

int n,i,j,k;

scanf("%d",&n);

for (i=0;i

scanf("%d",&a[i]);

for (i=0;i

{

k=i;

for (j=i+1;j

if (a[j]

随机数插入排序c 语言,C语言程序设计100例之(22):插入排序相关推荐

  1. c语言经典程序表白6,经典C语言程序设计100例(6)

    [程序61] 题目:打印出杨辉三角形(要求打印出10行如下图) 1.程序分析: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 2.程序源代码: main() ...

  2. c语言黑匡程序,2020年新版C语言实用程序设计100例流程图.docx

    C 语言实用程序 100 例 第一篇 基础与提高 实例 1 利用库函数编写基本显示程序 实例 2 变量属性 实例 3 运算符与类型 实例 4 关于程序结构 实例 5 显示函数曲线图 实例 6 二分法选 ...

  3. C语言经典编程题100例(1-20)

    1.练习2-1 Programming in C is fun! 2.练习2-3 输出倒三角图案 3.练习2-4 温度转换 4.练习2-6 计算物体自由下落的距离 5.练习2-8 计算摄氏温度 6.练 ...

  4. 黑马程序员——经典C语言程序设计100例

    1.数字排列 2.奖金分配问题 3.已知条件求解整数 4.输入日期判断第几天 5.输入整数进行排序 6.用*号显示字母C的图案 7.显示特殊图案 8.打印九九口诀 9.输出国际象棋棋盘 10.打印楼梯 ...

  5. c语言编程木块碰撞次数,C语言实用程序设计100例

    第一篇 基础与提高 实例1 利用库函数编写基本显示程序 3 实例2 变量属性 5 实例3 运算符与类型 7 实例4 关于程序结构 9 实例5 显示函数曲线图 12 实例6 二分法迭代的应用 15 实例 ...

  6. c语言编程 生理周期的程序,C语言程序设计100例之(9):生理周期

    例9    生理周期 问题描述 人生来就有三个生理周期,分别为体力.感情和智力周期,它们的周期长度为 23 天.28 天和33 天.每一个周期中有一天是高峰.在高峰这天,人会在相应的方面表现出色.例如 ...

  7. 4位数的水仙花c语言,C语言程序设计100例之(4):水仙花数

    例4    水仙花数 题目描述 一个三位整数(100-999),若各位数的立方和等于该数自身,则称其为"水仙花数"(如:153=13+53+33),找出所有的这种数. 输入格式 没 ...

  8. c语言程序设计植树,C语言程序设计100例之(19):欢乐的跳

    例19   欢乐的跳 题目描述 一个n个元素的整数数组,如果数组两个连续元素之间差的绝对值包括了[1,n-1]之间的所有整数,则称之符合"欢乐的跳",如数组1 4 2 3符合&qu ...

  9. c语言15除以2得到8,C语言程序设计100例之(15):除法算式

    例15   除法算式 问题描述 输入正整数n(2≤n≤68),按从小到大输出所有形如abcde/fghi=n的表达式.其中a~i为1~9的一个排列. 输入格式 每行为一个正整数n (n <= 1 ...

最新文章

  1. iOS逆向(4)-代码注入,非越狱窃取微信密码
  2. 实现数组字符串翻转的两种方法
  3. matlab访问数组的元素,使用分类数组访问数据
  4. 点击弹出窗口外任意地方关闭弹出窗口
  5. 三维重建:QT+OpenNI+Kinect图像校正
  6. as_hash ruby_Ruby中带有示例的Hash.delete_if方法
  7. Bootstrap 如何使用字体图标
  8. java 集合中对象的排序 和去重
  9. tomcat服务器的虚拟目录,Windows系统下安装Tomcat服务器和配置虚拟目录的方法
  10. 一年级abb式词语并造句_一年级语文ABB式词语专项练习附答案,考考孩子!
  11. vue实例中使用swiper
  12. win7怎么安装消息队列 MSMQ
  13. 003-信息技术学科知识与教学能力
  14. 中国电信“公板”计划主攻中端市场
  15. 学生3D作品---李自立---台式电脑加椅子(Blender 2.8)
  16. 从编程当中走向创业之路
  17. 迈道科技双重预防系统入选《2021年中国石油和化工企业500强发布会化工科技成果汇编》
  18. 什么是知识图谱(Knowledge Graph)(上)
  19. 2018年暑假 纪中培训总结
  20. 零阶保持器(ZOH)与一阶低通滤波器频率特性分析

热门文章

  1. 【SpringBoot】SpringBoot之Bean之自动加载
  2. eclipse下生成Java类图和时序图,生成UML图
  3. 01-windows下python爬取网页上的图片
  4. RPC实现以及相关学习
  5. java站站查询如何设计_站站查询示例代码
  6. Matlab绘制箕舌线
  7. Docker修改容器系统时间命令组
  8. MySQL高级-MySQL锁
  9. 题解 BZOJ1026 luogu P2657 [SCOI2009]windy数 数位DP
  10. 【转贴】龙芯内核发展策略 已经支持k8s