前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >第八天、直接插入排序

第八天、直接插入排序

作者头像
Jack_Cui
发布2017-12-28 12:11:41
5460
发布2017-12-28 12:11:41
举报
文章被收录于专栏:Jack-CuiJack-Cui

     插入排序是把一个记录插入到已排序的有序序列中,使整个序列在插入该记录后仍然有序。插入序列中较简单的一种方法是直接插入排序,其插入位置的确定方法是将待插入的记录与有序区中的各记录自右向左依次比较其关键字值的大小。本实例要求使用直接插入排序法将数组由小到大进行排序。 代码:

代码语言:javascript
复制
/*第八天、直接插入排序*/
#include <stdio.h>
#include <stdlib.h>
/*声明排序函数*/
void insort(int s[],int n);
/*监视哨:监视哨往往是程序里面的一个变量,如果是对数字排序的话,那么该变量一般是数值型变量。
变量的赋值就相当于哨兵,当排序数列中出现与哨兵相等的值或有某种既定关系出现时,就做一种操作,
比如说停止排序,或进行下一趟排序。*/
void main(void)
{
    int *a,n,i,j;
    printf("请问您要输入几个数据?例如:10\n");
    scanf("%d",&n);
    printf("请输入%d个数据:\t例如:20 15 46 21\n",n);
    a = (int *)malloc(sizeof(int) * n);    /*数组指针,动态分配数组大小*/
    for(i = 0;i < n;i++)
        scanf("%d",&a[i]);        /*接收从键盘输入的数据存放到数组中*/
    printf("原始顺序:");
    for(i = 0;i < n;i++)
        printf("%5d",a[i]);
    insort(a,n);
    printf("\n排序后数据:");
    for(i = 0;i < n;i++)
        printf("%5d",a[i]);
    printf("\n");
    free(a);                    /*释放内存*/
    system("pause");
}
/*排序函数*/
void insort(int s[],int n)
{
    int i,j,num;
    for(i = 1;i < n;i++)    /*从第二个元素开始比较*/
    {
        num = s[i];            /*监视哨,它就是要插入的数*/
        j = i - 1;            /*确定要比较元素的最右边位置*/
        while(num < s[j])    /*当j<0的时候,s[j]返回一个很大的负值,条件不成立退出循环*/
        {
            s[j + 1] = s[j];/*数据右移*/
            j--;            /*索引值左移,指向比较的下一个数*/
        }
        s[j + 1] = num;
    }
}

结果显示:

Visual Studio 2012
Visual Studio 2012

     感觉python和C放在一起练习的效果不好,比如今天的排序,python用一个sort()就能解决问题。因此决定python的练习另找习题。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-03-21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档