數組排序

排序的方法:





//方法一:sort:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>數組排序</title>
 6     <script>
 7         var arr = [9,1,2,5,7,4,8,6,3,5];
 8 
 9         arr.sort();
10     </script>
11 </head>
12 <body>
13 </body>
14 </html>
 

 

 
//方法二:選擇排序法:

思想每趟從待排序的記錄中選出最小關鍵字,順序放在已排序的記錄序列末尾,直到所有排序結束爲止。html

 

流程:(1)從待排序序列中,找到關鍵字最小的元素;算法

          (2)若是最小元素不是待排序序列的第一個元素,將其和第一個元素互換;數組

          (3)從餘下的 N - 1 個元素中,找出關鍵字最小的元素,重複(1)、(2)步,直到排序結束。ui

 

示意圖:spa


代碼:
 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>數組排序</title>
 6     <script>
 7         var arr = [9,1,2,5,7,4,8,6,3,5];
 8 
 9         function selectedSort(arr) {
10             for (var i = 0; i < arr.length; i++) {
11                 for (var j = i + 1; j < arr.length; j++) {
12                     if (arr[i] > arr[j]) {
13                         var num = arr[i];
14                         arr[i] = arr[j];
15                         arr[j] = num;
16                     }
17                 }
18                 //document.write(i+":"+arr+"<br>");
19             }
20         }
21 
22     </script>
23 </head>
24 <body>
25 </body>
26 </html>
 

 

//方法三:冒泡排序法:
 

思想冒泡排序的基本思想是,對相鄰的元素進行兩兩比較,順序相反則進行交換,這樣,每一趟會將最小或最大的元素「浮」到頂端,最終達到徹底有序。3d

 

示意圖:指針


代碼:
 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>數組排序</title>
 6     <script>
 7         var arr = [9,3,1,4,2,7,8,6,5];
 8 
 9         function bubbleSort(arr) {
10             for (var i = arr.length - 1; i >= 0; i--) {
11                 for (var j = 0; j < i; j++) {
12                     if (arr[j] > arr[j + 1]) {
13                         var num = arr[j];
14                         arr[j] = arr[j + 1];
15                         arr[j + 1] = num;
16                     }
17                 }
18             }
19         }
20 
21         /*document.write("冒泡排序前:" + arr);
22          bubbleSort(arr);
23          document.write("冒泡排序後:" + arr);*/
24 
25     </script>
26 </head>
27 <body>
28 </body>
29 </html>

 

 

//方法四:快速排序法:

思想經過一趟排序將要排序的數據分割成獨立的兩部分,其中一部分的全部數據都比另一部分的全部數據都要小,而後再按此方法對這兩部分數據分別進行快速排序,整個排序過程能夠遞歸進行,以此達到整個數據變成有序序列code

 

流程:設要排序的數組是A[0]……A[N-1],首先任意選取一個數據(一般選用數組的第一個數)做爲關鍵數據,而後將全部比它小的數都放到它前面,全部比它大的數都放到它後面,這個過程稱爲一趟快速排序。值得注意的是,快速排序不是一種穩定的排序算法,也就是說,多個相同的值的相對位置也許會在算法結束時產生變更。htm

一趟快速排序的算法是:
1)設置兩個變量i、j, 排序開始的時候:i=0,j=N-1;
2)以第一個數組元素做爲關鍵數據,賦值給 key,即 key=A[0];
3)從j開始向前搜索,即由後開始向前搜索(j--),找到第一個小於 key的值A[j],將A[j]和A[i]互換;
4)從i開始向後搜索,即由前開始向後搜索(i++),找到第一個大於 key的A[i],將A[i]和A[j]互換;
5)重複第三、4步,直到i=j; (3,4步中,沒找到符合條件的值,即3中A[j]不小於 key,4中A[i]不大於 key的時候改變j、i的值,使得j=j-1,i=i+1,直至找到爲止。找到符合條件的值,進行交換的時候i, j指針位置不變。另外,i==j這一過程必定正好是i+或j-完成的時候,此時令循環結束)。

 

示意圖:blog

 

代碼:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>數組排序</title>
 6     <script>
 7         var arr = [49,38,65,97,76,13,27,49];
 8 
 9     var start = 1 ;
10         function quicklySort(arr, left, right) {
11             if (left < right) {
12                 var i = left;
13                 var j = right;
14                 var key = arr[left];
15                 console.log("*************************");
16                 document.write(""+start+"趟快速排序前:" + arr+"<br>");
17                 
18                 while (j != i) {
19                     console.log("初始時:key=", key, ",i=", i, ",j=", j);
20                     
21                     while (j > i) {
22                         if (arr[j] < key) {
23                             //console.log("向前一次{i=",i,",j=",j,"}");
24                             var temp = arr[i];
25                             arr[i] = arr[j];
26                             arr[j] = temp;
27                             //console.log("交換後:",arr);
28                             break;
29                         }
30                         j--;
31                     }
32                     
33                     while (i < j) {
34                         if (arr[i] > key) {
35                             console.log("向後一次{i=", i, ",j=", j, "}");
36                             var temp = arr[i];
37                             arr[i] = arr[j];
38                             arr[j] = temp;
39                             console.log("交換後:", arr);
40                             break;
41                         }
42                         i++;
43                     }
44                     console.log("結束時:key=", key, ",i=", i, ",j=", j);
45                 }
46                 document.write(""+start+"趟快速排序後:" + arr+"<br>");
47                 start++;
48                 console.log("*************************");
49                 quicklySort(arr,left,i-1);
50                 quicklySort(arr,i+1,right);
51             }
52         }
53 
54         quicklySort(arr, 0, arr.length - 1);
55 
56 
57     </script>
58 </head>
59 <body>
60 </body>
61 </html>
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息