当前位置: 首页 > news >正文

外贸网站优化推广网站的服务器每年都要续费的吗

外贸网站优化推广,网站的服务器每年都要续费的吗,网站优化目录,本网站服务器在海外访问www.tomcoding.com网站,学习Oracle内部数据结构,详细文档说明,下载Oracle的exp/imp,DUL,logminer,ASM工具的源代码,学习高技术含量的内容。 如果你在网上搜一下希尔排序,都会告…

访问www.tomcoding.com网站,学习Oracle内部数据结构,详细文档说明,下载Oracle的exp/imp,DUL,logminer,ASM工具的源代码,学习高技术含量的内容。

如果你在网上搜一下希尔排序,都会告诉你希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序。然后列一些图标或动画演示,最后给出一个算法函数。你看了以后还是不知道什么是希尔排序,里面的图太复杂,你看上好几遍也不能抓住重点。

我们来看一下希尔排序算法要解决的问题,都说希尔算法是插入排序的改进版,那么为什么要改进呢?原因是插入排序要进行大量的元素交换(位置移动),在完全升序排列的数组中,算法最高效,不需要进行交换,在完全降序的数组中,算法效率最低。为了改善这种情况,希尔排序把数组中的元素先进行多个分组,然后把每个分组按照插入排序算法升序排列,然后减少分组的个数,再进行插入排序,最后预排序的数组不再分组,进行最后一次插入排序。预排序的目的就是把数组中数值小的元素尽量放到数组前面,减少最后一次排序元素交换的次数。

那么怎样分组呢?最容易想到的就是第一次分组使得两个元素一组,那么如果有n个元素,就有n/2个分组,如果n不能被2整除,那么留下一个元素不分组。第二次分组把第一次分组的个数再减半,依次类推,直到再减半就是0了,说明是最后一次分组了,那么把最后一次分组进行一次插入排序,数组中的元素就按升序排列好了。这里数组元素个数为单数时,最后一个元素不参与分组排序,直到最后一次插入排序时才参与。

看一下程序。

static void shell_sort(int *ai, int n)

{

    int         i, j;

    int         gap, ne;

    int         *t;

    /* gap是间隙,表示每隔gap值的元素分为一组

     * ne是每一组中包含多少个元素

     * 在这里先分配跟原数组大小一样的数组,用于分组

     */

    if ((t = (int *)malloc(n*sizeof(int))) == NULL)

        return;

    /* 起始gap取元素个数的半数值,这样每一组只包含两个元素

     * gap每次循环后减半,直到为1,退出循环,进行最后一次插入排序

     */

    for (gap = n/2, ne = n/gap; gap > 1; gap /= 2, ne = n/gap) {

        /* 把原数组ai中的元素分组,分完组后进行插入排序 */

        for (i = 0; i < gap; i++) {

            /* 下面的循环完成后,生成了一个分组 */

            for (j = 0; j < ne; j++)

                t[i*ne+j] = ai[i+j*gap];

            /* 对刚生成的分组排序 */

            insertion_sort(&t[i*ne], ne);

        }

        /* 每一次分组排序结束后,把排序后的元素恢复到原来数组的位置上 */

        for (i = 0; i < gap; i++) {

            for (j = 0; j < ne; j++)

                ai[i+j*gap] = t[i*ne+j];

        }

    }

    /* gap=1,进行最后一次排序,这时如果元素个数是单数,最后一个元素也会参与排序 */

    insertion_sort(ai, n);

    /* 释放掉分配的内存 */

    free(t);

}

上面实现的这个排序算法,看起来臃肿,还需要辅助的数组,但直观的表现了希尔算法是分组插入排序算法的本质。

其实每个组都是相同间隔的元素组成的,还是在同一个数组中,这样把插入排序算法揉进分组里去,就能简化代码,看一下整合后的函数。

void shell_sort(int *ai, int n) {

    int     i, j;

    int     gap, t;

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

        for(i = gap; i < n; i++) {

            for(j = i - gap; j >= 0 && ai[j] > ai[j+gap]; j -= gap) {

                /* 交换元素位置 */

                t         = ai[j];

                ai[j]     = ai[j+gap];

                ai[j+gap] = t;

            }

        }

    }

}

http://www.yayakq.cn/news/111762/

相关文章:

  • 网站免费打包ios阎良区网站建设
  • 公司做网站的费用入账网站建设 技术 哪些方面
  • 网站怎么做seo收录西安建设厅网站
  • 做恋爱方面的网站广西桂林旅游必去十大景点
  • 网站空间权限建设网站考虑因素
  • 网站后台生成文章很慢如何查看自己制作的网站
  • 昆明公司建设网站优质网站建设在哪里
  • 免费net网站空间珠海建网站多少钱
  • 网站建设工作建议哈尔滨市建设工程交易中心网站
  • 郑州专业做淘宝网站建设苏州哪家网站建设
  • 网站弹窗广告怎么做做网站时如何写接口文档
  • 网站开发技术方案实验报告深圳石岩做网站的公司
  • 免费自助网站百度一下手机版首页
  • 网站建设设计说明书建个网站有收
  • 惠州免费网站建设网络营销推广计划书范文
  • 网站关键词有什么用o2o商城分销网站开发
  • dedecms 网站迁移制作微信小程序需要什么技术
  • 在哪请人做网站织梦网站模板源码
  • 青岛建站公司电话现在外地人能进深圳吗
  • 大流量网站开发如何注册公司名字
  • 网站优化开发天津网站设计公司价格
  • 广东深圳网站建设方便免费模板网站都有什么用
  • 嘉兴做网站设计找个公司做网站需要注意什么条件
  • 惠州市做网站深圳龙华怎么样
  • 网站建设推广平台网址如何在外管局网站上做a合同
  • 网站建设济南云畅网络企业网站用什么做二次开发最快
  • 做网站需要多少钱啊合肥 网站设计
  • 邯郸哪里制作网站手机导航下载2022新版
  • 十堰市住房和城乡建设厅官方网站多语言建设外贸网站
  • muse做网站百度网站提交地址