精华内容
下载资源
问答
  • C语言希尔排序算法

    2021-05-20 06:19:55
    希尔排序法对一组数据由小到大进行排序,数据分别为 69、56、12、136、3、55、46、 99、88、25。实现过程:(1)自定义函数 shsort(),实现希尔排序。(2) main() 函数作为程序的入口函数。程序代码如下:#include ...

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

    实现过程:

    (1)自定义函数 shsort(),实现希尔排序。

    (2) main() 函数作为程序的入口函数。程序代码如下:

    #include

    int shsort(int s[], int n) /* 自定义函数 shsort()*/

    {

    int i,j,d;

    d=n/2; /*确定固定增虽值*/

    while(d>=1)

    {

    for(i=d+1;i<=n;i++) /*数组下标从d+1开始进行直接插入排序*/

    {

    s[0]=s[i]; /*设置监视哨*/

    j=i-d; /*确定要进行比较的元素的最右边位置*/

    while((j>0)&&(s[0]

    {

    s[j+d]=s[j]; /*数据右移*/

    j=j-d; /*向左移d个位置V*/

    }

    s[j + d]=s[0]; /*在确定的位罝插入s[i]*/

    }

    d = d/2; /*增里变为原来的一半*/

    }

    return 0;

    }

    int main()

    {

    int a[11],i; /*定义数组及变量为基本整型*/

    printf("请输入 10 个数据:\n");

    for(i=1;i<=10;i++)

    scanf("%d",&a[i]); /*从键盘中输入10个数据*/

    shsort(a, 10); /* 调用 shsort()函数*/

    printf("排序后的顺序是:\n");

    for(i=1;i<=10;i++)

    printf("%5d",a[i]); /*输出排序后的数组*/

    printf("\n");

    return 0;

    }

    运行结果:

    请输入 10 个数据:

    69 56 12 136 3 55 46 99 88 25

    排序后的顺序是:

    3   12   25   46   55   56   69   88   99  136

    技术要点:

    希尔排序是在直接插入排序的基础上做的改进,也就是将寒排序的序列按固定增量分成若干组,等距者在同二组中,然后再在组内进行直接插入排序。这里面的固定增量从 n/2 开始,以后每次缩小到原来的一半。

    展开全文
  • 希尔排序法对一组数据由小到大进行排序,数据分别为 69、56、12、136、3、55、46、 99、88、25。 例子: (1)自定义函数 shsort(),实现希尔排序。 (2) main() 函数作为程序的入口函数。程序代码如下: #...

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

     

    例子:

    (1)自定义函数 shsort(),实现希尔排序。

    (2) main() 函数作为程序的入口函数。程序代码如下:

    #include <stdio.h>

    int shsort(int s[], int n)    /* 自定义函数 shsort()*/

    {

        int i,j,d;

        d=n/2;    /*确定固定增虽值*/

        while(d>=1)

        {

            for(i=d+1;i<=n;i++)    /*数组下标从d+1开始进行直接插入排序*/

            {

                s[0]=s[i];    /*设置监视哨*/

                j=i-d;    /*确定要进行比较的元素的最右边位置*/

                while((j>0)&&(s[0]<s[j]))

                {

                    s[j+d]=s[j];    /*数据右移*/

                    j=j-d;    /*向左移d个位置V*/

                }

                s[j + d]=s[0];    /*在确定的位罝插入s[i]*/

            }

            d = d/2;    /*增里变为原来的一半*/

        }

    return 0;

    }

     

    int main()

    {

        int a[11],i;    /*定义数组及变量为基本整型*/

        printf("请输入 10 个数据:\n");

        for(i=1;i<=10;i++)

        scanf("%d",&a[i]);    /*从键盘中输入10个数据*/

        shsort(a, 10);    /* 调用 shsort()函数*/

        printf("排序后的顺序是:\n");

        for(i=1;i<=10;i++)

        printf("%5d",a[i]);    /*输出排序后的数组*/

        printf("\n");

        return 0;

    }

    想成为程序员,想掌握编程,关注小编吧

    免费学习书籍:

    免费学习资料:

    运行结果:

    69 56 12 136 3 55 46 99 88 25

    排序后的顺序是:

    3  12  25  46  55  56  69  88  99  136

    总结:

    希尔排序是在直接插入排序的基础上做的改进,也就是将寒排序的序列按固定增量分成若干组,等距者在同二组中,然后再在组内进行直接插入排序。这里面的固定增量从 n/2 开始,以后每次缩小到原来的一半。

    展开全文
  • 1.算法简介希尔排序(Shell Sort)是插入排序的一种,它是针对直接插入排序算法的改进。该方法又称缩小增量排序,因DL.Shell于1959年提出而得名。希尔排序实质上是一种分组插入方法。它的基本思想是:对于n个待排序的...

    1.算法简介

    希尔排序(Shell Sort)是插入排序的一种,它是针对直接插入排序算法的改进。该方法又称缩小增量排序,因DL.Shell于1959年提出而得名。希尔排序实质上是一种分组插入方法。它的基本思想是:对于n个待排序的数列,取一个小于n的整数gap(gap被称为步长)将待排序元素分成若干个组子序列,所有距离为gap的倍数的记录放在同一个组中;然后,对各组内的元素进行直接插入排序。 这一趟排序完成之后,每一个组的元素都是有序的。然后减小gap的值,并重复执行上述的分组和排序。重复这样的操作,当gap=1时,整个数列就是有序的。

    2.源码实现

    #include

    #include

    #include

    //希尔排序算法

    void shell_sort(int n, int *u)

    {

    int gap;

    int tmp;

    int i;

    int j;

    for(gap=n/2 ; gap>0; gap/=2)

    {

    for(i=gap; i

    {

    tmp = u[i];

    for(j = i; j >= gap && tmp < u[j-gap]; j -= gap)

    {

    u[j] = u[j-gap];

    }

    u[j] = tmp;

    }

    }

    }

    int main()

    {

    int u[] = {1, 9, 7, 0, 6};

    int n = 5;

    int i = 0;

    shell_sort(n, (int *)u);

    for(i=0; i

    {

    printf("%d ", u[i]);

    }

    putchar('\n');

    return 0;

    }

    3.编译源码

    $ gcc -o test test.c

    4.运行及结果

    $ ./test

    0 1 6 7 9

    展开全文
  • 附件提供的是C语言实现的希尔排序的代码,同时提供了代码实现的结果
  • 主要介绍了希尔排序算法C语言实现示例,希尔排序可以看作为一种高级的插入排序,需要的朋友可以参考下
  • Shell(希尔)排序算法C语言源程序,算法思路:比如对4个数进行排序,4个数分为两组,然后第1个数与第3个数进行比较,第2个数与第4个数进行比较,调整位置,然后将经过调整后的第2位与第3位再进行比较 。
  • 希尔排序算法C语言实现)

    万次阅读 热门讨论 2018-03-19 15:45:20
    希尔排序算法demo
    一、希尔排序
    
    由希尔在1959年提出,设定一个元素间隔增量gap,将参加排序的序列按这个间隔分成若干个子序列,对子序列用一般排序法排序与冒泡排序的思想相似,即将两数比较交换;冒泡法是相邻两数比较交换,而希尔排序只有当希尔间隔值为1时才与冒泡法完全一样,所以可以跟据希尔间隔值的不同进行分组排序最优间隔值是至今未解决的数据难题,一般用折半间隔,直到间隔为1;如果直接将希尔间隔设为1效率则是最低的,需要多次遍历。

    二、希尔排序处理过程

    将固定间隔值两两比较交换,若干次后,这个序列将成为一个有序序列对分好组的子序列采用两两比较交换,循环比较一遍之后序列不一定有序,所以对于子序列可能会进行多次循环比较,直到排好序。

    三、图解


    四、demo

    void shellsort(int *k,int n)
    {
        int i, j, temp, gap = n;
        while(gap > 1)
        {
            gap = gap/2;                /*增量缩小,每次减半*/
            for(i=0;i<n-gap;i++) //n-gap 是控制上限不让越界
            {
                j = i + gap;    //相邻间隔的前后值进行比较
                if(k[i]>k[j])
                {
                    temp = k[i];
                    k[i] = k[j];
                    k[j] = temp;
                }
            }
        }
    }
    展开全文
  • C语言版的希尔排序算法,可以有按照升序、降序两种方式进行排序
  • 希尔排序算法详解及实现---c语言

    千次阅读 2018-09-20 16:26:09
    插入排序算法详解及实现   关于插入排序我们知道,它适用于有少量数据的情况,但是若数据量比较大我们应该如何进行排序呢?   一种方法当然是希尔排序。   希尔排序也是利用插入排序的思想来排序。希尔排序...
  • 希尔排序也叫缩小增量排序,它其实是直接插入排序的一种改进版本,实质是一种分组插入方法基本思想:算法先将要排序的一组数按某个增量d(d一般的初次取序列的一半为增量,以后每次减半,直到增量为1。基本步骤:以...
  • 希尔排序法对一组数据由小到大进行排序,数据分别为 69、56、12、136、3、55、46、 99、88、25。 实现过程: (1)自定义函数 shsort(),实现希尔排序。 (2)main() 函数作为程序的入口函数。 程序代码如下:...
  • 希尔排序C语言实现

    2014-02-18 21:50:16
    希尔排序C语言实现完整代码,可在VC6平台上运行。
  • 希尔排序的基本思想是:先将整个待排序列分割成若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行一次直接插入排序。用希尔排序法对一组数据由小到大进行排序,数据分别为 69、...
  • C语言常见排序算法.ppt上章回顾,二叉树的定义 树深度的定义 什么样的二叉树是满二叉树 中序遍历的规则,常见排序算法,第六章,预习检查课程目标,本章概述 几种常见排序算法。 本章目标 熟悉常见的查找算法和排序算法 ...
  • C语言实现排序算法---希尔排序

    千次阅读 多人点赞 2017-12-05 20:51:09
    希尔排序(Shell Sort)是插入排序的一种。...希尔排序是非稳定排序算法。该方法因DL.Shell于1959年提出而得名。 使用该算法,应首先为待排序元素序列选择一个不大于元素个数的增量,或者也称步长(step)。其
  • 文章目录C语言实现希尔排序希尔排序算法项目完整代码运行效果图 希尔排序算法 //希尔排序算法 void ShellSort(int arr[], int len) { int d, i, j; //arr[0]只是暂存单元,不是哨兵,当j<=0时,表示到达插入...
  • 希尔排序算法,使用C语言实现 #include <stdio.h> void shellsort(int num[],int len); int main(){ int num[10] = {5,2,6,0,3,9,1,7,4,8};//待排序数组 shellsort(num,10); for(int i = 0; i<10 ;i...
  • 希尔排序:又称"缩小增量排序"。基本思想:先将待排序列分为若干个子序列分别进行直接插入排序,待整个序列“基本有序时”,再对整个序列进行一次直接插入排序。 图例:
  • 希尔排序的介绍这里就不赘述了,网上有很多。直接上代码,代码在CODEBLOCKS测试通过。 void array_print(int *array,int num) { int i; for(i = 0;i < num; i++) printf("%d\t",array[i]); printf("\n")...
  • C语言代码实现冒泡排序,快速排序,希尔排序,归并排序,该代码可用gcc编译器直接编译运行,经测试,结果正确。
  • 常见经典排序算法 1.希尔排序 2.二分插入法 3.直接插入法 4.带哨兵的直接排序法 5.冒泡排序 6.选择排序 7.快速排序 8.堆排序
  • 希尔排序 希尔排序又称“增量缩小排序”,它也是一种属插入排序类的方法。 基本思想 先将整个待排记录序列分割成为若干个子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行一次直接...
  • 希尔排序 C语言实现

    千次阅读 2020-11-19 18:37:52
    希尔排序 希尔排序( Shell’s Sort)又称“缩小增量排序”( Diminishing Increment Sort),是插入排序的一种, 因D.L.Shell 于1959 年提出而得名。 直接插人排序,当待排序的记录个数较少且待排序序列的关键字基本...
  • 希尔排序 O(n^1.25) 1.插入排序 O(n^2) 一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下:⒈ 从第一个元素开始,该元素可以认为已经被排序⒉ 取出下一个元素,在已经排序的元素序列中从后向前扫描...
  • C语言经典排序算法实现(一):冒泡排序 冒泡排序(英语:Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,509
精华内容 2,203
关键字:

c语言希尔排序算法

c语言 订阅
友情链接: CShanpPulg.rar