zoukankan      html  css  js  c++  java
  • 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));
  • 相关阅读:
    普通的一个python脚本,hadoop进军的准备
    Python之数据类型讲解
    开始博客的理由
    【微机原理及应用】程序的分类
    【jvm】jvm学习第二篇。jvm运行机制
    【jvm】jvm学习第一篇。初识jvm
    【it公司】it公司简介-项目流程-研发小技巧
    【感悟】20岁的人生不应该停止奋斗。----------------努力努力再努力
    【书籍学习】史上最全的Java进阶书籍推荐
    【职业规划】3年工作经验的程序员应该具备的技能
  • 原文地址:https://www.cnblogs.com/wangze0608/p/7692235.html
Copyright © 2011-2022 走看看