首页 > 技术文章 > 数组排序

miaoxiaojiao 2017-06-17 18:18 原文

排序的方法:





//方法一: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>

 

 
//方法二:选择排序法:

思想每趟从待排序的记录中选出最小关键字,顺序放在已排序的记录序列末尾,直到全部排序结束为止。

 

流程:(1)从待排序序列中,找到关键字最小的元素;

          (2)如果最小元素不是待排序序列的第一个元素,将其和第一个元素互换;

          (3)从余下的 N - 1 个元素中,找出关键字最小的元素,重复(1)、(2)步,直到排序结束。

 

示意图:


代码:
 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>

 

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

思想冒泡排序的基本思想是,对相邻的元素进行两两比较,顺序相反则进行交换,这样,每一趟会将最小或最大的元素“浮”到顶端,最终达到完全有序。


示意图:


代码:
 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>

 

 

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

思想通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列

 

流程:设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。值得注意的是,快速排序不是一种稳定的排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生变动。

一趟快速排序的算法是:
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)重复第3、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-完成的时候,此时令循环结束)。

 

示意图:

 

代码:

 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>

 


推荐阅读