• 基本排序算法及分析(三):shell排序


    shell排序是对直接插入方法的改进方法.

     1/*-------------------------------------------------------------------------------------
     2Shell_sort.h
     3shell排序是对直接插入方法的改进,它并不是对相邻元素进行比较,而是对一定间隔的元素比较.
     4选择增量序列的几种方法:(为方便,本例采用第一种增量序列)
     51. h[1]=size, h[k] = h[k-1]/2.
     6    最坏运行时间为O(N^2).
     7    最坏情形:数组长度为2^n,数组的偶数位置上同是一个数,奇数位置上也同是一个数,
     8              且比偶数位置的小。此时到最后一次遍历前shell排序实际上什么也没做。
     9              最后一次遍历相当于直接插入方法。
    102. Hibbard增量序列: h = 1,3,7,,2^k-1
    11    这个的区别于上的主要的特点是相邻增量没有公因子
    12    最坏运行时间为O(n^{1.5});
    133. Sedgewick增量序列:{1,5,19,41,109,}
    14-------------------------------------------------------------------------------------*/

    15
    16#ifndef SHELL_SORT_H
    17#define SHELL_SORT_H
    18
    19#include "typedef.h"
    20
    21void Shell_sort(T* a, int n)
    22{
    23
    24    for(int gap = n; gap > 0; gap = gap/2)
    25    {
    26        for(int i = 0; i != n; ++i)
    27        {
    28            T temp = a[i];
    29            int j = i - gap;
    30            for( ; j >= 0 && a[j] > temp; j = j-gap)
    31                a[j+gap] = a[j];
    32            a[j+gap] = temp;
    33        }

    34    }

    35}

    36
    37#endif



    幸运草 2009-04-22 16:50 发表评论
  • 相关阅读:
    Jquery超简单遮罩层实现代码
    java中Token验证
    基于Token的WEB后台认证机制
    jsp页面数据回显(select下拉选择框)
    ckeditor 绑定事件
    ckeditor 触发事件(案例)
    Linux sed命令学习
    字符串 全排列生成问题
    算法导论第九章 第K顺序统计量
    字符串相似度算法 递归与动态规划求解分析
  • 原文地址:https://www.cnblogs.com/liyuxia713/p/2540780.html
Copyright © 2020-2023  润新知