Html5 簡單選擇排序演示

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

簡單選擇排序,是選擇排序演算法的一種。基本思想:每趟從待排序的記錄中選出關鍵字最小的記錄,順序放在已排序的記錄序列末尾,直到全部排序結束為止。由於在每次迴圈中,會對數值相等的元素改變位置,所以屬於非穩定排序。 如下圖所示: 對簡單選擇排序的優化方案,是採用二元選擇排序,即將其改進為每趟迴圈確定兩個元素 ...


簡單選擇排序,是選擇排序演算法的一種。基本思想:每趟從待排序的記錄中選出關鍵字最小的記錄,順序放在已排序的記錄序列末尾,直到全部排序結束為止。由於在每次迴圈中,會對數值相等的元素改變位置,所以屬於非穩定排序。

---------------------------------------------------------------------

如下圖所示:

對簡單選擇排序的優化方案,是採用二元選擇排序,即將其改進為每趟迴圈確定兩個元素(當前趟最大和最小記錄)的位置,從而減少排序所需的迴圈次數。改進後對n個數據進行排序,最多只需進行[n/2]趟迴圈。

如下圖所示:

演算法原理,不再贅述,代碼如下:

  1 <!DOCTYPE html>
  2 <html>
  3 <head>
  4     <title>The thirteen 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:280px;
 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:150px;
 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             var childs = mainArea.childNodes;
 92             //添加節點之前先刪除,應該從後往前刪除,否則節點移動,只能刪除一半
 93             for (var i = childs.length - 1; i >= 0; i--) {
 94                 mainArea.removeChild(childs[i]);
 95             }
 96 
 97             for (var i = 0; i < 8; i++) {
 98                 var newDivLine = document.createElement("div");
 99                 newDivLine.setAttribute("class", "line");
100                 newDivLine.setAttribute("id", i);
101                 mainArea.appendChild(newDivLine);
102                 for (var j = 0; j < 9; j++) {
103                     var newDiv = document.createElement("div");
104                     var id = i.toString() + j.toString();
105                     newDiv.setAttribute("id", id);
106                     if (j < 8) {
107                         newDiv.setAttribute("class", "ball");
108                     } else {
109                         newDiv.setAttribute("class", "mark");
110                     }
111                     newDivLine.appendChild(newDiv);
112                 }
113             }
114         }
115 
116         //初始元素賦值
117         function setElementsValue() { 
118             var arrTmp = [4, 6, 8, 7, 9, 2, 10, 1];
119             for (var i = 0; i < arrTmp.length; i++) {
120                 document.getElementById("0" + i.toString()).innerText = arrTmp[i];
121             }
122             document.getElementById("08").innerText = "原始數據";
123         }
124 
125         //簡單選擇排序
126         function setSimpleSortValue() {
127             var arrTmp = [4, 6, 8, 7, 9, 2, 10, 1];
128             var m = 0;//表示要交換的最小坐標
129             for (var i = 0; i < arrTmp.length-1; i++) {
130                 m = i;
131                 for (var j = i + 1; j < arrTmp.length; j++) {
132                     if (arrTmp[m] > arrTmp[j]) {
133                         m = j;
134                     }
135                 }
136                 if (arrTmp[i] > arrTmp[m]) {
137                     var tmp = arrTmp[m];
138                     arrTmp[m] = arrTmp[i];
139                     arrTmp[i] = tmp;
140                 }
141                 //顯示出來
142                 for (var k = 0; k < arrTmp.length; k++) {
143                     document.getElementById((i+1).toString() + k.toString()).innerText = arrTmp[k];
144 
145                     if (i == k) {
146                         document.getElementById((i + 1).toString() + (k).toString()).setAttribute("class", "redball");
147                     } else {
148                         document.getElementById((i + 1).toString() + (k).toString()).attributes["class"].nodeValue="ball";;
149                     }
150                 }
151                 document.getElementById((i+1).toString() + "8").innerText = "" + (i+1).toString() + " 趟排序(Min=" + arrTmp[i] + "";
152 
153             }
154         }
155 
156         //二元選擇排序
157         function setDoubleSelectSort() {
158             var arrTmp = [4, 6, 8, 7, 9, 2, 10, 1];
159             selectSortB(arrTmp);
160             var len=arrTmp.length;
161             for (var i = (len / 2)+1; i < len; i++) {
162                 for (var j = 0; j < 8; j++) {
163                     document.getElementById((i).toString() + (j).toString()).innerText = "";
164                     document.getElementById((i).toString() + (j).toString()).className="ball";
165                 }
166                 document.getElementById(i.toString() + "8").innerText = "";
167             }
168         }
169         
170         //二元選擇排序(升序)
171         function selectSortB(a) {  
172             var len = a.length;
173             var temp, min, max;
174             for (var i = 0; i < len / 2; i++) {
175                 min = i; max = i;
176                 for (var j = i + 1; j <= len - 1 - i; j++) {
177                     max = (a[j] > a[max]) ? j : max;//每一趟取出當前最大和最小的數組下標
178                     min = (a[j] < a[min]) ? j : min;
179                 };
180                 temp = a[i];//先放小的
181                 a[i] = a[min];
182                 if (i == max) { //最大數在數組頭部
183                     if ((len - i - 1) !== min) {//最大數在頭部,最小數在尾部
184                         a[min] = a[len - i - 1];
185                     }
186                     a[len - i - 1] = temp;
187                 }
188                 else if ((len - i - 1) === min) {//最大數不在頭部,

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

-Advertisement-
Play Games
更多相關文章
  • idea版本:2016.3 maven: apache-maven-3.3.9 tomcat:apache-tomcat-8.5.8 1、tomcat.apache.org 下載tomcat http://maven.apache.org/download.cgi 下載maven 下載解壓放在專門j ...
  • 一、簡介 網路爬蟲(又被稱為網頁蜘蛛,網路機器人,在FOAF社區中間,更經常的稱為網頁追逐者),是一種按照一定的規則,自動地抓取萬維網信息的程式或者腳本。另外一些不常使用的名字還有螞蟻、自動索引、模擬程式或者蠕蟲。 二、requests Python標準庫中提供了:urllib、urllib2、ht ...
  • 操作系統:Win10 java版本:1.8.0_102 1、下載安裝java JDK(安裝時把jre放在了同級目錄) 地址為:F:\Program Files\Java 目錄下 2、配置環境變數 此電腦 ->右鍵“屬性” ->高級系統設置 ->環境變數 (一)在系統變數中新建:變數名:JAVA_HO ...
  • 題目大意: 給定一個n個數的序列和m個詢問(n,m<=100000)和k,每個詢問包含k+2個數字:l,r,b[1],b[2]...b[k],要求輸出b[1]~b[k]在[l,r]中是否出現。 思路:把所有連續的k個數字hash一下,然後扔進主席樹,詢問時在主席樹中查詢就可以了。 註意(坑)點:1、 ...
  • 觀察者模式由四個角色組成:抽象組件角色,抽象裝飾者角色,具體組件角色,具體裝飾者角色。 抽象組件角色:給出一個抽象介面,以規範“準備接受附加功能”的對象。 抽象裝飾者角色:持有一個組件(Component)對象的引用,並定義一個與抽象組件介面一致的介面。 具體組件角色:定義一個準備接受附加功能的類。 ...
  • renren-security是一個輕量級許可權管理系統,其核心設計目標是開發迅速、學習簡單、輕量級、易擴展;使用Spring MVC、Shiro、MyBatis、Bootstrap、Vue2.x等框架,包含:管理員管理、角色管理、菜單管理、定時任務、參數管理、代碼生成器等。 ...
  • 1.環境準備 下載mongoDB對Java支持的驅動包 驅動包下載地址:https://github.com/mongodb/mongo-java-driver/downloads 2.查詢集合中所有文檔 3.刪除集合中的文檔 4.向集合中插入文檔 5.更新集合中的文檔 ...
  • 1.概念 分片(sharding)是指將數據拆分,將其分散存在不同的機器上的過程。有時也用分區(partitioning)來表示這個概念。將數據分散到不同的機器上,不需要功能強大的大型電腦就可以儲存更多的數據,處理更多的負載。 2.分片 mongos就是一個路由伺服器,它會根據管理員設置的“片鍵” ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...