Html5 希爾排序演示

来源:http://www.cnblogs.com/hsiang/archive/2016/12/21/6209367.html
-Advertisement-
Play Games

希爾排序(Shell Sort)是插入排序的一種。也稱縮小增量排序,是直接插入排序演算法的一種更高效的改進版本。 如下圖所示: 代碼如下: 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <title>The eleven html page</title> 5 <styl ...


希爾排序(Shell Sort)是插入排序的一種。也稱縮小增量排序,是直接插入排序演算法的一種更高效的改進版本。

如下圖所示:

代碼如下:

  1 <!DOCTYPE html>
  2 <html>
  3 <head>
  4     <title>The eleven html page</title>
  5  <style type="text/css">
  6         ul li
  7         {
  8             list-style-type:georgian;
  9             text-align:left;
 10          }
 11         .mark
 12         {
 13             width:140px;
 14             height:40px;
 15             color:Olive;
 16             text-align:center;
 17             line-height:40px;
 18             margin:5px;
 19             float:left;
 20          }
 21           .redball
 22         {
 23             width:40px;
 24             height:40px;
 25             border-radius:20px;
 26             background-color:Red;
 27             text-align:center;
 28             line-height:40px;
 29             margin:5px;
 30             float:left;
 31         }
 32         .ball
 33         {
 34             width:40px;
 35             height:40px;
 36             border-radius:20px;
 37             background-color:Aqua;
 38             text-align:center;
 39             line-height:40px;
 40             margin:5px;
 41             float:left;
 42         }
 43         .line
 44         {
 45             clear:left;
 46          }
 47         header
 48         {
 49             height:80px;
 50             border:1px solid gray;
 51         }
 52         .left
 53         {
 54             border:1px solid gray;
 55             float:left;
 56             width:30%;
 57             height:480px;
 58             margin-left:0px;
 59             margin-right:0px;
 60             
 61         }
 62         aside
 63         {
 64             text-align:center;
 65         }
 66         section
 67         {
 68             width:69.5%;
 69             float:left;
 70             height:480px;
 71             border:1px solid gray;
 72             margin-left:0px;
 73             margin-right:0px;
 74         }
 75         footer
 76         {
 77             clear:left;
 78             height:60px;
 79             border:1px solid gray;
 80         }
 81         input[type="button"]
 82         {
 83             width:80px;
 84             text-align:center;
 85             margin-top:10px;
 86          }
 87     </style>
 88     <script type="text/javascript">
 89         function initDiv() {
 90             var mainArea = document.getElementById("mainArea");
 91             for (var i = 0; i < 8; i++) {
 92                 var newDivLine = document.createElement("div");
 93                 newDivLine.setAttribute("class", "line");
 94                 mainArea.appendChild(newDivLine);
 95                 for (var j = 0; j < 9; j++) {
 96                     var newDiv = document.createElement("div");
 97                     var id = i.toString() + j.toString();
 98                     newDiv.setAttribute("id", id);
 99                     if (j < 8) {
100                         newDiv.setAttribute("class", "ball");
101                     } else {
102                         newDiv.setAttribute("class", "mark");
103                     }
104                     newDivLine.appendChild(newDiv);
105                 }
106             }
107         }
108 
109         //初始元素賦值
110         var arrTmp = [4, 6, 8, 7, 9, 2, 10, 1];
111         function setElementsValue() {
112             for (var i = 0; i < arrTmp.length; i++) {
113                 document.getElementById("0" + i.toString()).innerText = arrTmp[i];
114             }
115             document.getElementById("08").innerText = "原始數據";
116         }
117 
118         //希爾排序
119         function setShellSortValue() {
120             var m = 0;//表示第幾趟排序
121             //d的值,4,2,1,表示增量
122             for (var d = Math.floor(arrTmp.length / 2); d > 0; d = Math.floor(d / 2)) {
123                 //第一次,d=4,迴圈次數,依次比較0,4/1,5/2,6/3,7
124                 var atmp = new Array();
125                 var n=0;
126                 for (var i = d; i < arrTmp.length; i++) {
127                    //如果第i個元素,小於第i-d個元素,則需要移動,否則不需要移動
128                     if (arrTmp[i]<arrTmp[i - d] ) {
129                         var j = i - d; //依次比較j和d+j個元素的大小
130                         while (j >= 0) {
131                             if (arrTmp[j] > arrTmp[d + j]) {
132                                 var temp = arrTmp[j];
133                                 arrTmp[j] = arrTmp[d + j];
134                                 arrTmp[d + j] = temp;
135                                 atmp[n]=(d + j);
136                                 n=n+1;
137                             }
138                             j -= d;
139                         }
140                     }
141                 }
142                 m = m + 1;
143                 //顯示出來
144                 for (var k = 0; k < arrTmp.length; k++) {
145                     document.getElementById((m).toString() + k.toString()).innerText = arrTmp[k];
146                     for(var n=0;n<atmp.length;n++){
147                         if(atmp[n] ==k){
148                         document.getElementById((m).toString() + (atmp[n]).toString()).setAttribute("class", "redball");
149                         }
150                     }
151                 }
152                 document.getElementById((m).toString() + "8").innerText = "" + (m).toString() + " 趟排序(d="+d+"";
153 
154             }
155         }
156 
157     </script>
158 </head>
159 <body>
160 <header>
161     <h1>希爾排序(Shell Sort)Demo</h1>
162 </header>
163 <aside class="left">
164 
165 <input type="button" id="btnInit" value="Init" onclick="initDiv();" />
166 <br />
167 <input type="button" id="btnSetValue" value="SetValue" onclick="setElementsValue();" />
168 <br />
169 <input type="button" id="btnSort" value="Shell Sort" onclick="setShellSortValue();" />
170 <br />
171 <h3>希爾排序(Shell Sort)</h3>
172 <ul>
173     <li>希爾排序(Shell Sort)是插入排序的一種。也稱縮小增量排序,是直接插入排序演算法的一種更高效的改進版本。</li>
174     <li>希爾排序是<mark>非穩定</mark>排序演算法。</li>
175     <li>希爾排序是把記錄按下標的一定增量分組,對每組使用直接插入排序演算法排序;隨著增量逐漸減少,每組包含的關鍵詞越來越多,當增量減至1時,整個文件恰被分成一組,演算法便終止。</li>
176     <li>一般的初次取序列的一半為增量,以後每次減半,直到增量為1。</li>
177     <li>最後一個增量必須為1;</li>
178     <li>時間複雜度和增量的設定有關介於O(nLogn)與O(n<sup>2</sup>)之間,一般O(n<sup>1.3</sup>)</li>
179 </ul>
180 </aside>
181 <section id="mainArea">
182     
183 </section>
184 <footer>
185     這是底部信息
186 </footer>
187 </body>
188 </html>
View Code

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 部分內容取自:http://www.jianshu.com/p/dd97cbb3c22d,我自己也在使用,持續更新中 Atom安裝插件在視窗中File Setting install 在裡面進行搜索就行。 minimap: 為Atom加上一個代碼預覽地圖,就想sublime中右側的縮略圖一樣,效果如 ...
  • 一、前言 巨坑,基礎沒學好,導致找了一個下午的問題,終於被我發現了。說多都是淚,記錄下來,以後有人遇到這個錯誤可以參考下 做項目期間做了幾個頁面,需要用到彈出層,為了方便使用到了Layer的插件,然後寫點擊事件在form表單中(第一個坑),接著,又使用button按鈕(悲劇的開始),同樣放在form ...
  • 1,什麼是事件委托:通俗的講,事件就是onclick,onmouseover,onmouseout,等就是事件,委托呢,就是讓別人來做,這個事件本來是加在某些元素上的,然而你卻加到別人身上來做,完成這個事件。 也就是:利用冒泡的原理,把事件加到父級上,觸發執行效果。 好處呢:1,提高性能。 我們可以 ...
  • 關於jquery中用函數來設置css樣式 2016-12-21 23:27:55 1.jquery語法 $(selector).css(name,function(index,value)) name:必需。規定 CSS 屬性的名稱 function(index,value): 規定返回CSS屬性新 ...
  • 上一篇隨筆提到了MvcPager,最近用到了一款前端JQ插件 DataTable(簡稱DT),很好用。 DT是一款前端插件,和後端完全分離開,就這點來看,我就特別喜歡。 一.使用DT,需要以下支持 js:jq+jquery.dataTables.min.js 二、頁面上進行引入js,直接使用DT功能 ...
  • 有 2 種方法可以實現 html 的定時頁面跳轉,1、meta refresh 實現。2、JavaScript 實現。 1、通過 meta refresh 實現 3 秒後自動跳轉到 http://www.cnblogs.com/wuxibolgs329/ 頁面。 2、通過 JavaScript 實現 ...
  • 想要使用 JQuery 實現兩列等高並自適應高度,其實也很簡單,原理就是取得左右兩邊的高度,然後判斷這個值,把大的值賦給小的就行了。看代碼: ...
  • 不僅不同瀏覽器不同,不同的字體,不同的文字大小也會表現不一樣。 重置 form checkbox & radio 因為不同瀏覽器解析不一樣,有些是預設margin,有些是預設padding,還有ie6,7連margin和padding即使設置為0後,所占的空間還是比較大,所以還是有必須重置下,這樣就 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...