body { background-color: white }
.markdown-body { min-width: 200px; max-width: 760px; margin: 0 auto; padding: 20px; color: #333; overflow: hidden; font-family: "Helvetica Neue", Helvetica, "Segoe UI", Arial, freesans, sans-serif; font-size: 16px; line-height: 1.6 }
.markdown-body a { background: transparent }
.markdown-body a:active,.markdown-body a:hover { outline: 0 }
.markdown-body strong { font-weight: bold }
.markdown-body h1 { font-size: 2em; margin: 0.67em 0 }
.markdown-body img { border: 0 }
.markdown-body hr { height: 0 }
.markdown-body pre { overflow: auto }
.markdown-body code,.markdown-body kbd,.markdown-body pre { font-family: monospace, monospace; font-size: 1em }
.markdown-body input { color: inherit; font: inherit; margin: 0 }
.markdown-body html input[disabled] { cursor: default }
.markdown-body input { line-height: normal }
.markdown-body input[type="checkbox"] { padding: 0 }
.markdown-body table { border-collapse: collapse; border-spacing: 0 }
.markdown-body td,.markdown-body th { padding: 0 }
.markdown-body * { }
.markdown-body input { font: 13px/1.4 Helvetica, arial, freesans, clean, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol" }
.markdown-body a { color: #4183c4; text-decoration: none }
.markdown-body a:hover,.markdown-body a:focus,.markdown-body a:active { text-decoration: underline }
.markdown-body hr { height: 0; margin: 15px 0; overflow: hidden; background: transparent; border: 0; border-bottom: 1px solid #ddd }
.markdown-body hr::before { display: table; content: "" }
.markdown-body hr::after { display: table; clear: both; content: "" }
.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6 { margin-top: 15px; margin-bottom: 15px; line-height: 1.1 }
.markdown-body h1 { font-size: 30px }
.markdown-body h2 { font-size: 21px }
.markdown-body h3 { font-size: 16px }
.markdown-body h4 { font-size: 14px }
.markdown-body h5 { font-size: 12px }
.markdown-body h6 { font-size: 11px }
.markdown-body blockquote { margin: 0 }
.markdown-body ul,.markdown-body ol { padding: 0; margin-top: 0; margin-bottom: 0 }
.markdown-body ol ol,.markdown-body ul ol { list-style-type: lower-roman }
.markdown-body ul ul ol,.markdown-body ul ol ol,.markdown-body ol ul ol,.markdown-body ol ol ol { list-style-type: lower-alpha }
.markdown-body dd { margin-left: 0 }
.markdown-body code { font: 12px Consolas, "Liberation Mono", Menlo, Courier, monospace }
.markdown-body pre { margin-top: 0; margin-bottom: 0; font: 12px Consolas, "Liberation Mono", Menlo, Courier, monospace }
.markdown-body kbd { background-color: #e7e7e7; background-image: linear-gradient(#fefefe, #e7e7e7); background-repeat: repeat-x; border: 1px solid #cfcfcf; color: #000; padding: 3px 5px; line-height: 10px; font: 11px Consolas, "Liberation Mono", Menlo, Courier, monospace; display: inline-block }
.markdown-body>*:first-child { margin-top: 0 !important }
.markdown-body>*:last-child { margin-bottom: 0 !important }
.markdown-body .anchor { position: absolute; top: 0; bottom: 0; left: 0; display: block; padding-right: 6px; padding-left: 30px; margin-left: -30px }
.markdown-body .anchor:focus { outline: none }
.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6 { position: relative; margin-top: 1em; margin-bottom: 16px; font-weight: bold; line-height: 1.4 }
.markdown-body h1 .octicon-link,.markdown-body h2 .octicon-link,.markdown-body h3 .octicon-link,.markdown-body h4 .octicon-link,.markdown-body h5 .octicon-link,.markdown-body h6 .octicon-link { display: none; color: #000; vertical-align: middle }
.markdown-body h1:hover .anchor,.markdown-body h2:hover .anchor,.markdown-body h3:hover .anchor,.markdown-body h4:hover .anchor,.markdown-body h5:hover .anchor,.markdown-body h6:hover .anchor { height: 1em; padding-left: 8px; margin-left: -30px; line-height: 1; text-decoration: none }
.markdown-body h1:hover .anchor .octicon-link,.markdown-body h2:hover .anchor .octicon-link,.markdown-body h3:hover .anchor .octicon-link,.markdown-body h4:hover .anchor .octicon-link,.markdown-body h5:hover .anchor .octicon-link,.markdown-body h6:hover .anchor .octicon-link { display: inline-block }
.markdown-body h1 { padding-bottom: 0.3em; font-size: 2.25em; line-height: 1.2; border-bottom: 1px solid #eee }
.markdown-body h2 { padding-bottom: 0.3em; font-size: 1.75em; line-height: 1.225; border-bottom: 1px solid #eee }
.markdown-body h3 { font-size: 1.5em; line-height: 1.43 }
.markdown-body h4 { font-size: 1.25em }
.markdown-body h5 { font-size: 1em }
.markdown-body h6 { font-size: 1em; color: #777 }
.markdown-body p,.markdown-body blockquote,.markdown-body ul,.markdown-body ol,.markdown-body dl,.markdown-body table,.markdown-body pre { margin-top: 0; margin-bottom: 16px }
.markdown-body hr { height: 4px; padding: 0; margin: 16px 0; background-color: #e7e7e7; border: 0 none }
.markdown-body ul,.markdown-body ol { padding-left: 2em }
.markdown-body ul ul,.markdown-body ul ol,.markdown-body ol ol,.markdown-body ol ul { margin-top: 0; margin-bottom: 0 }
.markdown-body li>p { margin-top: 16px }
.markdown-body dl { padding: 0 }
.markdown-body dl dt { padding: 0; margin-top: 16px; font-size: 1em; font-style: italic; font-weight: bold }
.markdown-body dl dd { padding: 0 16px; margin-bottom: 16px }
.markdown-body blockquote { padding: 0 15px; color: #777; border-left: 4px solid #ddd }
.markdown-body blockquote>:first-child { margin-top: 0 }
.markdown-body blockquote>:last-child { margin-bottom: 0 }
.markdown-body table { display: block; width: 100%; overflow: auto }
.markdown-body table th { font-weight: bold }
.markdown-body table th,.markdown-body table td { padding: 6px 13px; border: 1px solid #ddd }
.markdown-body table tr { background-color: #fff; border-top: 1px solid #ccc }
.markdown-body table tr:nth-child(2n) { background-color: #f8f8f8 }
.markdown-body img { max-width: 100% }
.markdown-body code { padding: 0; padding-top: 0.2em; padding-bottom: 0.2em; margin: 0; font-size: 85%; background-color: rgba(0,0,0,0.04) }
.markdown-body code::before,.markdown-body code::after { letter-spacing: -0.2em; content: "?" }
.markdown-body pre>code { padding: 0; margin: 0; font-size: 100%; white-space: pre; background: transparent; border: 0 }
.markdown-body .highlight { margin-bottom: 16px }
.markdown-body .highlight pre,.markdown-body pre { padding: 16px; overflow: auto; font-size: 85%; line-height: 1.45; background-color: #f7f7f7 }
.markdown-body .highlight pre { margin-bottom: 0 }
.markdown-body pre { }
.markdown-body pre code { display: inline; max-width: initial; padding: 0; margin: 0; overflow: initial; line-height: inherit; background-color: transparent; border: 0 }
.markdown-body pre code::before,.markdown-body pre code::after { content: normal }
.markdown-body .highlight { background: #fff }
.markdown-body .highlight .mf,.markdown-body .highlight .mh,.markdown-body .highlight .mi,.markdown-body .highlight .mo,.markdown-body .highlight .il,.markdown-body .highlight .m { color: #945277 }
.markdown-body .highlight .s,.markdown-body .highlight .sb,.markdown-body .highlight .sc,.markdown-body .highlight .sd,.markdown-body .highlight .s2,.markdown-body .highlight .se,.markdown-body .highlight .sh,.markdown-body .highlight .si,.markdown-body .highlight .sx,.markdown-body .highlight .s1 { color: #df5000 }
.markdown-body .highlight .kc,.markdown-body .highlight .kd,.markdown-body .highlight .kn,.markdown-body .highlight .kp,.markdown-body .highlight .kr,.markdown-body .highlight .kt,.markdown-body .highlight .k,.markdown-body .highlight .o { font-weight: bold }
.markdown-body .highlight .kt { color: #458 }
.markdown-body .highlight .c,.markdown-body .highlight .cm,.markdown-body .highlight .c1 { color: #998; font-style: italic }
.markdown-body .highlight .cp,.markdown-body .highlight .cs { color: #999; font-weight: bold }
.markdown-body .highlight .cs { font-style: italic }
.markdown-body .highlight .n { color: #333 }
.markdown-body .highlight .na,.markdown-body .highlight .nv,.markdown-body .highlight .vc,.markdown-body .highlight .vg,.markdown-body .highlight .vi { color: #008080 }
.markdown-body .highlight .nb { color: #0086B3 }
.markdown-body .highlight .nc { color: #458; font-weight: bold }
.markdown-body .highlight .no { color: #094e99 }
.markdown-body .highlight .ni { color: #800080 }
.markdown-body .highlight .ne { color: #990000; font-weight: bold }
.markdown-body .highlight .nf { color: #945277; font-weight: bold }
.markdown-body .highlight .nn { color: #555 }
.markdown-body .highlight .nt { color: #000080 }
.markdown-body .highlight .err { color: #a61717; background-color: #e3d2d2 }
.markdown-body .highlight .gd { color: #000; background-color: #fdd }
.markdown-body .highlight .gd .x { color: #000; background-color: #faa }
.markdown-body .highlight .ge { font-style: italic }
.markdown-body .highlight .gr { color: #aa0000 }
.markdown-body .highlight .gh { color: #999 }
.markdown-body .highlight .gi { color: #000; background-color: #dfd }
.markdown-body .highlight .gi .x { color: #000; background-color: #afa }
.markdown-body .highlight .go { color: #888 }
.markdown-body .highlight .gp { color: #555 }
.markdown-body .highlight .gs { font-weight: bold }
.markdown-body .highlight .gu { color: #800080; font-weight: bold }
.markdown-body .highlight .gt { color: #aa0000 }
.markdown-body .highlight .ow { font-weight: bold }
.markdown-body .highlight .w { color: #bbb }
.markdown-body .highlight .sr { color: #017936 }
.markdown-body .highlight .ss { color: #8b467f }
.markdown-body .highlight .bp { color: #999 }
.markdown-body .highlight .gc { color: #999; background-color: #EAF2F5 }
.markdown-body .octicon { font: normal normal 16px octicons-anchor; line-height: 1; display: inline-block; text-decoration: none }
.markdown-body .octicon-link::before { content: "?" }
.markdown-body .task-list-item { list-style-type: none }
.markdown-body .task-list-item+.task-list-item { margin-top: 3px }
.markdown-body .task-list-item input { float: left; margin: 0.3em 0 0.25em -1.6em; vertical-align: middle }
table td { }
.hljs { display: block; padding: 0.5em; color: #333; background: #f8f8f8 }
.hljs-comment,.diff .hljs-header { color: #998; font-style: italic }
.hljs-keyword,.css .rule .hljs-keyword,.hljs-winutils,.nginx .hljs-title,.hljs-subst,.hljs-request,.hljs-status { color: #333; font-weight: bold }
.hljs-number,.hljs-hexcolor,.ruby .hljs-constant { color: #008080 }
.hljs-string,.hljs-tag .hljs-value,.hljs-doctag,.tex .hljs-formula { color: #d14 }
.hljs-title,.hljs-id,.scss .hljs-preprocessor { color: #900; font-weight: bold }
.hljs-list .hljs-keyword,.hljs-subst { font-weight: normal }
.hljs-class .hljs-title,.hljs-type,.vhdl .hljs-literal,.tex .hljs-command { color: #458; font-weight: bold }
.hljs-tag,.hljs-tag .hljs-title,.hljs-rule .hljs-property,.django .hljs-tag .hljs-keyword { color: #000080; font-weight: normal }
.hljs-attribute,.hljs-variable,.lisp .hljs-body,.hljs-name { color: #008080 }
.hljs-regexp { color: #009926 }
.hljs-symbol,.ruby .hljs-symbol .hljs-string,.lisp .hljs-keyword,.clojure .hljs-keyword,.scheme .hljs-keyword,.tex .hljs-special,.hljs-prompt { color: #990073 }
.hljs-built_in { color: #0086b3 }
.hljs-preprocessor,.hljs-pragma,.hljs-pi,.hljs-doctype,.hljs-shebang,.hljs-cdata { color: #999; font-weight: bold }
.hljs-deletion { background: #fdd }
.hljs-addition { background: #dfd }
.diff .hljs-change { background: #0086b3 }
.hljs-chunk { color: #aaa }
内排序之希尔排序
希尔排序是直接插入排序的优化算法,维基百科上的一段话:
假设有一个很小的数据在一个已按升序排好序的数组的末端, 如果用复杂度为O(n2)的排序(冒泡排序或插入排序), 可能会进行n次的比较和交换才能将该数据移至正确位置。而希尔排序会用较大的步长移动数据,所以小数据只需进行少数比较和交换即可到正确位置.
生命一个长度为16的数组: [13, 14, 94, 33, 82, 25, 59, 94, 65, 23, 45, 27, 73, 25, 39, 10], 以步长为5分组,借用维基百科上的图片如下:
依次按列进行插入排序,例如: 对13, 25, 45, 10进行插入排序,对14, 59, 27进行插入排序...
道理是这么个道理,编码的时候,我们的递归顺序跟不是像上面说的,而是(13, 25), (14, 59)...(82, 23) 这样一排一排 横着走的,不是真的按列进行编码。
python实现的代码如下:
# coding: utf-8
def shell_sort(list):
# 挖坑法
n = len(list)
# 初始步长
gap = n // 2
while gap > 0:
for i in range(gap, n):
# 每个步长进行插入排序
temp = list[i]
j = i
# 插入排序
while j >= gap and list[j - gap] > temp:
list[j] = list[j - gap]
j -= gap
list[j] = temp
# 得到新的步长
gap = gap // 2
return list
def shell_sort_1(list):
# 交换法
n = len(list)
# 初始步长
gap = n // 2
while gap > 0:
for i in range(gap, n):
# 每个步长进行插入排序
temp = list[i]
# 插入排序
j = i - gap
while j >= 0 and temp < list[j]:
list[j], list[j + gap] = list[j + gap], list[j]
j -= gap
# 得到新的步长
gap = gap // 2
return list
if __name__ == "__main__":
a = [3, 1, 9, 2, 3, 11, 8, 2, 0]
print(a)
shell_sort_1(a)
# shell_sort(a)
print(a)
原文地址:https://www.cnblogs.com/becker/p/9156902.html