首页 > 系统相关 >20230406 9.2. 希尔排序( by Donald Shell )

20230406 9.2. 希尔排序( by Donald Shell )

时间:2023-06-19 11:15:05浏览次数:50  
标签:Shell 20230406 希尔 Donald 增量 序列 排序

希尔排序( by Donald Shell )

希尔排序

  • 定义增量序列 \(D_M > D_{M-1} > … > D_1 = 1\)
  • 对每个 \(D_k\) 进行 \(D_k-间隔\) 排序( k = M, M-1, … 1 )
  • 注意: \(D_k-间隔\) 有序的序列,在执行 \(D_{k-1}-间隔\) 排序后,仍然是 \(D_k-间隔\) 有序的

希尔增量序列

原始希尔排序 $D_M = N / 2 $ , $D_k = D_{k+1} / 2 $

void Shell_sort( ElementType A[], int N ) 
{ 
    for ( D=N/2; D>0; D/=2 ) { /* 希尔增量序列 */
        for ( P=D; P<N; P++ ) { /* 插入排序 */
            Tmp = A[P]; 
            for ( i=P; i>=D && A[i-D]>Tmp; i-=D ) {
                A[i] = A[i-D]; 
            }
            A[i] = Tmp; 
        }
    }
}
  • 最坏情况: \(T = Θ( N2 )\)
  • 举个坏例子:增量元素不互质,则小增量可能根本不起作用

更多增量序列

  • Hibbard 增量序列
    • \(D_k = 2^k – 1\) : 相邻元素互质
    • 最坏情况: \(T = Θ ( N^{3/2} )\)
    • 猜想:\(T_{avg} = O ( N^{5/4} )\)
  • Sedgewick增量序列
    • {1, 5, 19, 41, 109, … }
    • \(9*4^i – 9*2^i + 1\) 或 \(4^i – 3*2^i + 1\)
    • 猜想:\(T_{avg} = O ( N^{7/6} )\),\(T_{worst} = O ( N^{4/3} )\)

标签:Shell,20230406,希尔,Donald,增量,序列,排序
From: https://www.cnblogs.com/huangwenjie/p/17490511.html

相关文章

  • shell判断和流程控制
    1.条件判断1.文件判断作用:判断文件的各种属性及状态,比如文件是否存在,是否有可读可写可执行权限语法:参数说明举例-e如果文件或目录存在则为真-常用[-efile]-s如果文件存在且至少有一个字符则为真[-sfile]-d如果文件存在且为目录则为真-常用......
  • shell 登录linux服务器并执行命令
    注意里边(eeooff区域)不能定义变量#!/bin/bashscpdist.zipm-p:/data/wwwroot/medical-shop-websshm-p>/dev/null2>&1<<eeooffcd/data/wwwrootrm-rfdist_bakmvdistdist_bakunzipdist.zipexiteeooffechodone!进入容器操作不能用次方法,应该用docker......
  • Shell脚本_统计当前shell脚本已经运行了几分几秒
    可以使用date命令获取当前时间,再与脚本开始运行的时间进行计算,最后将计算结果转换为分钟和秒数。示例代码:#!/bin/bash#记录脚本开始运行的时间start_time=$(date+%s)#执行脚本的主体代码sleep5#计算脚本已经运行的时间end_time=$(date+%s)elapsed_time=$((end_time......
  • linux shell 编程比较详解
    shell编程字符串比较shell中整数比较和字符串比较方法,如等于,不等于,大于,大于等于,小于,小于等于等。1、整数比较-eq等于,如if["$a"-eq"$b"]-ne不等于,如if["$a"-ne"$b"]-gt大于,如if["$a"-gt"$b"]-ge大于等于,如if["$a"-ge"......
  • shell的date的部分处理--需要记住..
    在Linux中,可以使用date命令获取日期,date获取当前完整日期date--date="3daysago"获取3天前的完整日期date--date="3daysago"+%Y%m%d  获取3天前的年月日;在date命令中,可以用%指定要显示内容,显示结果为如下形式:20120429......
  • shell启停脚本
    #!/usr/bin/envbash#获取服务目录xxx_dir=$(cd$(dirname"${BASH_SOURCE[0]}")&&pwd)#端口检测间隔w_interval=3#启动后端口检测次数max_retried_times=50REDIS_INSTALL_DIR=/bin/REDIS_CONFIG_FILE=/etc/redis/redis.confMONGO_INSTALL_DIR=/usr/MONGO_CON......
  • [ Shell ] 在 Bash 中如何使用“字典”
    https://www.cnblogs.com/yeungchie/定义declare-Adict赋值批量赋值dict=([a]=1[b]=2[c]=3)追加赋值dict[lib]=topdict[cell]=XX1234dict[view]=layout取值取值方式与数组一样。echo"${dict[a]}"#1echo"${dict[cell]}"#XX1234打印所有key和value......
  • linux shell根据关键字用sed注释掉整行
    一、将带有ab的行注释掉#cattest #sed-i'/ab/s/^\(.*\)$/#\1/g'testab是关键字s是语法替换^是行首$是行尾\是转义符数字1带表前述匹配内容 #cattest  二、将带有ab的行取消注释 #cattest #sed-i'/ab/s/^#\(.*\)$/\1/g'test #cattest ......
  • 白名单rundll32加载shellcode上线metasploit(nim学习系列)
    白名单rundll32加载shellcode上线metasploit监听metasploitmsfconsole-x"useexploits/multi/handler;setlhost192.168.0.101;setlport443;setpayloadwindows/x64/meterpreter/reverse_tcp;exploit"生成shellcodemsfvenom-pwindows/x64/meterpreter/r......
  • 常见WebShell的流量特征
    常见WebShell的流量特征菜刀payload的特征:php:asp:<%evalrequest("caidao")%>asp.net:<%@PageLanguage="Jscript"%><%eval(Request.Item["caidao"],"unsafe");%>数据包流量特征:请求包中:ua头为百度请求体中有eval,base64等特征字符请求体中传......