第八天、直接插入排序

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

/*第八天、直接插入排序*/
#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 条评论
登录 后参与评论

相关文章

来自专栏计算机视觉与深度学习基础

Leetcode 87 Scramble String

Given a string s1, we may represent it as a binary tree by partitioning it to t...

18510
来自专栏Bingo的深度学习杂货店

Q136 Single Number

Given an array of integers, every element appears twice except for one. Find tha...

2515
来自专栏北京马哥教育

Python 条件语句

文 | 糖豆 图 | 来源网络 糖豆贴心提醒,本文阅读时间3分钟,文末有秘密! Python 条件语句 Python条件语句是通过一条或多条语句的执行...

3307
来自专栏mathor

CodeForces E. XOR and Favorite Number(Div.2)

 一个莫队的基础题,题目要求[L,R]里面有多少对子区间异或值为k,记录一下前缀异或和arr,因为x^x=0,现在我们要求区间[L,R]的异或和值,用arr...

281
来自专栏赵俊的Java专栏

判断字符串是否没有重复元素

1052
来自专栏编程

Python入门基础连载(2)数据结构

Python数据结构包括了列表(list),元组(tuple),字典(dict)和集合(set),这些也都可以称之为容器,下面Cooldog就和大家一起学习一下...

1867
来自专栏菩提树下的杨过

js中数组(Array)的排序(sort)注意事项

直接看代码吧,测试结果也贴在里面了 var arrDemo = new Array(); arrDemo[0] = 10; arrDemo[1] = 50...

2056
来自专栏前端布道

JavaScript之正则表达式

正则表达式 (regular expression) 描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某...

2686
来自专栏null的专栏

LeetCode——Two Sum

题目: Given an array of integers, find two numbers such that they add up to a spec...

3095
来自专栏Python

python2/3中 将base64数据写成图片,并将图片数据转为16进制数据的方法、bytes/string的区别

python 3中最重要的新特性可能就是将文本(text)和二进制数据做了更清晰的区分。文本总是用unicode进行编码,以str类型表示;而二进制数据以byt...

1802

扫码关注云+社区