第八天、直接插入排序

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

/*第八天、直接插入排序*/
#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;
    }
}

结果显示:

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏专注 Java 基础分享

Java 字符流文件读写

1342
来自专栏二进制文集

FastJSON 源码分析

Fastjson是一个Java语言编写的高性能功能完善的JSON库。它采用一种“假定有序快速匹配”的算法,把JSON Parse的性能提升到极致,是目前Java...

942
来自专栏二进制文集

JDK源码分析 异常

对于JDK源码分析的文章,仅仅记录我认为重要的地方。源码的细节实在太多,不可能面面俱到地写清每个逻辑。所以我的JDK源码分析,着重在JDK的体系架构层面,具体源...

664
来自专栏noteless

[二十四]JavaIO之PrintWriter

他与PrintStream的逻辑上功能目的是相同的--他们都想做同一件事情--更便捷的格式化打印输出

432
来自专栏IT可乐

Java IO详解(四)------字符输入输出流

 File 类的介绍:https://cloud.tencent.com/developer/article/1012532 Java IO 流的分类介绍:ht...

23010
来自专栏java一日一条

那些经常被遗忘的 Java 面试题

静态内部类实际上与普通类(即类名必须与文件名一样的顶级类)一样,只是静态内部类在某一类的内部定义了而已,既然是类,要想使用就必须实例化。概念上与静态变量、静态方...

411
来自专栏Java帮帮-微信公众号-技术文章全总结

第十天 面向对象-继承抽象类【悟空教程】

1796
来自专栏代码拾遗

反射基础之Class

Java中每个类型要么是引用类型,要么是原生类型。类,枚举,数组(他们都继承于java.lang.Object)和接口都是引用类型。例如:java.lang.S...

794
来自专栏我杨某人的青春满是悔恨

Swift中的内存管理

之前用Swift写了一个App,已经在App Store上架了。前两天更新了一些功能,然后用Instruments检查的时候,发现有内存泄漏问题。有些同学可能觉...

925
来自专栏移动端开发

内存管理说明白点

1202

扫码关注云+社区