第九天、希尔排序

    用希尔排序法对一组数据由小到大进行排序,数据分别为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 条评论
登录 后参与评论

相关文章

来自专栏Python疯子

python数据清洗

数据的质量直接关乎最后数据分析出来的结果,如果数据有错误,在计算和统计后,结果也会有误。 所以在进行数据分析前,我们必须对数据进行清洗。需要考虑数据是否需要修...

852
来自专栏Script Boy (CN-SIMO)

软件工程作业02

题目:      二柱子又对自己提出了新的要求: ? 设计思想: 项目名称、源文件等见软件工程作业01 对于乘除法,其实我们作业01中已经有了除法,别忘了...

1890
来自专栏个人随笔

房上的猫:switch选择结构,与选择结构总结

switch选择结构: ? 一.定义:  switch选择结构,可以方便地解决等值判断问题 二.语法:  switch(表达式){   case 常量1:   ...

34011
来自专栏HansBug's Lab

1441: Min

1441: Min Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 320  Solved: 213 [Submi...

1904
来自专栏程序猿DD

第一章 正则表达式字符匹配攻略

第一章 正则表达式字符匹配攻略 正则表达式是匹配模式,要么匹配字符,要么匹配位置。请记住这句话。 然而关于正则如何匹配字符的学习,大部分人都觉得这块比较杂乱。...

19610
来自专栏Android机器圈

数据结构与算法----数学应用之一元多项式

PS:上一篇说了线性表的顺序表和链式表表达,该片就写一下应用到现实数学中去,一元多项式的加减。

442
来自专栏mukekeheart的iOS之旅

No.006 ZigZag Conversion

6. ZigZag Conversion Total Accepted: 98584 Total Submissions: 398018 Difficulty:...

2159
来自专栏信安之路

【作者投稿】奇葩webshell技巧

前段时间看XDCTF的一道web题,发现了一种很奇特的构造webshell的方法。

960
来自专栏AI派

Numpy 修炼之道 (10)—— 结构化数组

之前我们操作Numpy的数组时,都是通过索引来操作的。针对二维数组,使用索引可以完成对行、列的操作。但是这是非常不直观的。可以把二维数组想象成一个excel表格...

4315
来自专栏我的小碗汤

一文带你读懂:最小栈问题

设一个变量int min = -1; 当一个元素进入栈时,把最小值的下标记录成0,后面进来的数和stack[min]做比较,如果大于等于当前的最小值,那就不做变...

803

扫码关注云+社区