js常见排序算法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js常见排序算法相关的知识,希望对你有一定的参考价值。

常见的有冒泡排序、选择排序、归并排序、快排、希尔排序、插入排序等 等 

 

 1 var arr=[1,2,3,6,5,4,7,9,8];
 2         /*冒泡排序*/
 3         /*相当于是对数组进行循环,相邻的两个进行比较,如果后面的比前面的小,调换位置,始初保持两个数后面的是值较大的,这样排到最后,最大的值会被调换至末尾,依次类推,完成排序*/
 4         function bubbleSrot(arr) {
 5             for(var i=0;i<arr.length;i++){
 6                 for(var j=0;j<arr.length-1;j++){ /*这里的lenght-1是设置把排序进行到第几位,因为最后一位已经确定,所以省略最后一个*/
 7                     if( arr[j+1] < arr[j]){
 8                         temp = arr[j+1];
 9                         arr[j+1] = arr[j];
10                         arr[j] = temp;
11                     }
12                 }
13             }
14             return arr;
15         }
16 //        console.log(‘bubbleSort: ‘+bubbleSrot(arr));    /*[1, 2, 3, 4, 5, 6, 7, 8, 9]*/
17 
18 
19         /*选择排序*/
20         /*相当于是从数组中循环,从循环的范围内找出最小的,与第一个比较,如果比第一个小调换位置,如下面代码中,当i=0的时候,相当于第一次循环,所以在数组的第二个到最后一个范围中选出一个最小的,与第一个比较,进行是否调换 ,依此类推,进行数组排序*/
21         function selectionSort (arr){
22             var len = arr.length;
23             for(var i=0;i<len;i++){
24                 var min = arr[i];   /*假设第一个值为数组中最小值*/
25                 var index = i;  /*最小值的下标*/
26                 for(var j= i+1;j<len;j++){  /*从数组下标为1的值开始比较*/
27                     if (arr[j] < min) {     /*比较获取最小值,如果下一个值比min小的话,把值赋给min,并把下标赋值给*/
28                         min = arr[j];
29                         index = j;
30                     }
31                 }
32                 if(index != i){     /*如果第范围内第一个值不是最小的,把它与最小的调换位置*/
33                     var temp = arr[i];
34                     arr[i] = arr[index];
35                     arr[index] = temp;
36                 }
37             }
38             return arr;
39         }
40 //        console.log(‘selectionSort:‘+selectionSort(arr));   /*[1, 2, 3, 4, 5, 6, 7, 8, 9]*/
41 
42         /*归并排序*/
43         /*所一个数组分为两个数组,先排好左边,再排好右边,然后把两个合并到一起*/
44         function mergeSort(arr,s,e){
45             if(s>e){   //起始位置大于终点位置,返回空数组
46                 return [];
47             }else if(s==e){
48                 return [arr[s]]; //起始位置等于终点位置,说明数组里只有一个数字,返回只含一个数字的数组
49             }
50 
51             var mIndex = Math.floor((s+e)/2); //中间位置的Index
52             var arrL = mergeSort(arr,s,mIndex); //将左边的数组排序
53             var arrR = mergeSort(arr,mIndex+1,e); //将右边的数组排序
54 
55             var resultArr = []; //结果数组
56             while(arrL.length>0 || arrR.length>0){ //当左右两个数组都不为空时
57                 if(arrL[0]<arrR[0]){
58                     resultArr.push(arrL.shift());
59                 }else{
60                     resultArr.push(arrR.shift());
61                 }
62 
63                 if(arrL.length==0){  //当左边的数组为空时
64                     resultArr = resultArr.concat(arrR);
65                     break;
66                 }else if(arrR.length==0){
67                     resultArr = resultArr.concat(arrL);
68                     break;
69                 }
70             }
71             return resultArr;
72         }
73 
74 //        console.log(mergeSort(arr,0,arr.length-1));
75 
76         /*快速排序*/
77         /*从数组中选一个元素作为标准,大于这个数的放到它的右边,小于这个数的放到它的左边,依此类推,直到只剩下一个元素,排序完成*/
78         function quickSort (arr) {
79             if (arr.length <= 1) {
80                 return arr;
81             }
82             var mNumIndex = Math.floor(arr.length/2);  /*设置基数index*/
83             var mNum = arr.splice([mNumIndex],1)[0];     /*获取基数值*/
84             var left = [];
85             var right = [];
86 
87             for(var i=0;i<arr.length;i++){
88                 if(arr[i]<mNum) {
89                     left.push(arr[i]);
90                 } else {
91                     right.push(arr[i]);
92                 }
93             }
94             return quickSort(left).concat([mNum],quickSort(right));
95         }
96 //        console.log(quickSort(arr));

 

以上是关于js常见排序算法的主要内容,如果未能解决你的问题,请参考以下文章

js常见排序算法

几种常见算法js

前端常见算法JS实现

前端常见算法的JS实现

《数据结构与算法》十大经典排序算法动图演示(2019最新Python代码)

常见14种经典排序算法(Java代码实现)