第九天、希尔排序

    用希尔排序法对一组数据由小到大进行排序,数据分别为69、56、12、136、3、55、46、99、88、25。 希尔排序的全过程如下:

代码实现:

/*第九天、希尔排序*/
#include <stdio.h>
#include <stdlib.h>
/****************************************************************************************
*希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效 *
*的改进版本。希尔排序是非稳定排序算法。该方法因DL.Shell于1959年提出而得名。            *
*希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少 *
*每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。            *
*****************************************************************************************/

/******************************************* 
*函数名称:Shsort 
*参数说明:pDataArray 无序数组指针
*          iDataNum   无序数据个数 
*说明:    希尔排序 
********************************************/  
void Shsort(int* pDataArray,int iDateNumn)
{
    int i,j,d;
    d = iDateNumn / 2;                                   /*确定固定增量值,设为数组长度的一半*/
    while(d >= 1)                                        /*增量等于1退出循环*/
    {
        for(i = d;i < iDateNumn;i++)                     /*数组下标从d开始进行直接插入排序*/
        {                                                /*也就是数组的第d+1个元素*/
            int temp = pDataArray[i];                    /*设置监视哨,元素最右边的位置*/
            j = i - d;                                   /*确定要进行比较的元素的最左边位置*/
            while((j >= 0) && (temp < pDataArray[j]))    /*从后向前,找到比其小的数的位置*/
            {
                pDataArray[j + d] = pDataArray[j];       /*数据右移*/
                j -= d;                                  /*向左移动d个位置*/
            }
            if (j != i - d)                              /*存在比其小的数*/
                pDataArray[j + d] = temp;                /*在确定的位置插入pDataArray[i]*/
        }
        d = d / 2;
    }

}

/******************************************* 
*函数名称:main
*参数说明:无
*说明:    主函数 
********************************************/  
void main(void)
{
    int pDataArray[10],i;                        
    printf("请输入10个数据:\n");
    for(i = 0;i < 10;i++)
        scanf("%d",&pDataArray[i]);
    Shsort(pDataArray,10);
    printf("排序后的顺序是:\n");
    for(i = 0;i < 10;i++)
        printf("%5d",pDataArray[i]);
    printf("\n");
    system("pause");
}

结果显示:

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏逸鹏说道

Python3 与 C# 扩展之~基础拓展

看着小张准备回家换衣服了,小明有点失落,又有点孤单,于是说道:“逗逼张,你还要听吗?我准备讲类相关的知识了,这些可是我课后自学的哦~”

17140
来自专栏互联网杂技

28个JavaScript 编程黑科技:还有这种操作!

从来不需要声明一个变量的值是undefined,因为JavaScript会自动把一个未赋值的变量置为undefined。所有如果你在代码里这么写,会被鄙视的

14330
来自专栏chenjx85的技术专栏

leetcode-657-Judge Route Circle

19240
来自专栏陈满iOS

编程语言傻傻分不清:弱类型、强类型、动态类型、静态类型

这篇文章综合介绍了四种分类,特别地,为了方便大家快速有效的学习,笔者尝试用思维导图的办法描述编程语言的区别。一般来讲,看第一个图就够了。但如果你想更深入地了解,...

29810
来自专栏大闲人柴毛毛

Java8新特性——StreamAPI(二)

1. 收集器简介 收集器用来将经过筛选、映射的流进行最后的整理,可以使得最后的结果以不同的形式展现。 collect方法即为收集器,它接收Collector接...

32150
来自专栏PHP在线

字符编码笔记:ASCII,Unicode和 UTF-8

1. ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二 进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出...

27550
来自专栏一个爱吃西瓜的程序员

Python基础学习-简单数据类型

一:字符串 1:.title()方法将每个单词的首字母改为大写 例: ? 输出: ? 2:.upper()方法将字符串全部改为大写 例: ...

41780
来自专栏小樱的经验随笔

RMQ问题(线段树算法,ST算法优化)

RMQ (Range Minimum/Maximum Query)问题是指: 对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A...

29960
来自专栏PHP在线

字符编码笔记

字符编码笔记:ASCII,Unicode和 UTF-8 1. ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二 进制位...

29390
来自专栏微信公众号:Java团长

JavaSE入门篇:变量

图片上的各种餐具,就是变量,因为同一个盘子可以在不同的时间装不同的菜,在这一桌可以装土豆肉丝,在下一桌可以装清炒黄瓜(当然,这个盘子还是要洗洗干净滴)。

12020

扫码关注云+社区

领取腾讯云代金券