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

例22  插入排序

问题描述php

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

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

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

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

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

5769de3b09e9f37ec85945da9e8c5596.png

图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所示。图中方括号[ ]中为已排好序的记录关键字的子序列,下划线的关键字表示它对应的记录对须要交换位置。

b2c68fe2b4cecb82cbdea1c6b1d8aedc.png

图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]

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值