zoukankan      html  css  js  c++  java
  • 重温前端基础之-js排序算法

    javascript数组常用的方法

    push():返回值,数组新的长度

    pop():返回值,被删除的数组末尾元素

    shift():返回值,被删除的数组首部元素

    unshift():返回值,数组新的长度

    concat():返回值,拼接后新的数组

    slice():返回值,截取的新的数组

    splice():返回值,被插入/删除/替换元素的数组

    map():返回新的数组

    filter():返回被筛选后的新的数组

    reduce():返回新的数组

    sort():返回排序后的新的数组

    与数组有关的两个:

    join():将数组转化为用特殊符号分割的字符串

    reverse():将数组顺序逆转

    不常用的:

    every()

    some()

      1 //1、使用sort方法进行排序的算法如下:
      2 
      3 //字符串排序:
      4 
      5 var arr = [George,John,Thomas,James,Adrew,Martin];
      6 
      7 arr.sort();
      8 
      9 //数字排序:
     10 
     11 var arr = [4,3,7,10,15,30,22];
     12 
     13 arr.sort(function(a,b){
     14   return a-b>0;
     15 })
     16 
     17 //2、冒泡排序:
     18 
     19 function bubbbleSort(arr){
     20 
     21   if(!Array.isArray(arr)){
     22 
     23     return new Error("arr不是数组");
     24 
     25   }
     26 
     27   if(arr.length<=1){
     28 
     29     return arr;
     30 
     31   }
     32 
     33   var temp,i,j;
     34 
     35   for(i=0;i<arr.length;i++){
     36 
     37     for(j=0;j<arr.length-i-1;j++){
     38 
     39       if(arr[j]>arr[j+1]){
     40 
     41         temp = arr[j];
     42 
     43         arr[j] = arr[j+1];
     44         arr[j+1]=temp;
     45 
     46       }
     47 
     48     }
     49 
     50 
     51   }
     52   return arr;
     53 
     54 }
     55 
     56 //改进版冒泡排序:(添加一个标志位,可以让已经排过序的不用重复遍历)
     57 
     58 function bubbbleSort(arr){
     59 
     60   if(!Array.isArray(arr)){
     61 
     62     return new Error("arr不是数组");
     63 
     64   }
     65 
     66   if(arr.length<=1){
     67 
     68     return arr;
     69 
     70   }
     71 
     72   var pos,temp,j;
     73   var i = arr.length-1;//初始时,最后位置保持不变
     74 
     75   while(i>0){
     76     pos = 0;//每一轮循环,位置从0开始。
     77     for(j=0;j<i;j++){
     78       if(arr[j]>arr[j+1]){
     79         pos = j;
     80         temp = arr[j];
     82          arr[j] = arr[j+1];
     83         arr[j+1]=temp;
     84 
     85       }
     86 
     87     }
     88 
     89     i=pos;
     90   }
     91   return arr;
     92 
     93 }
     94 
     95  
     96 
     97 //3、快速排序(原理是,1、找一个基值,一般是数组的中间数,2、然后将大于中间值的数放右边,小于中间值的数放左边,3、然后递归第二步,4返回拼接好排序后的数组)
     98 
     99 function quickSort(arr){
    100   if(!Array.isArray(arr)){
    101     return new Error("arr不是数组");
    102   }
    103 
    104   if(arr.length<=1){
    105     return arr;
    106   }
    107   var i,left = [],right = [];
    108   var midIndex = Math.floor(arr.length/2);
    109   var midItem = arr.splice(midIndex,1)[0];//此处要把中间值从数组中去掉。
    110   for(i=0;i<arr.length;i++){
    111     if(arr[i]<midItem){
    112       left.push(arr[i]);
    113     }else{
    114       right.push(arr[i]);
    115     }
    116   }
    117   return quickSort(left).concat([midItem],quickSort(right));
    118 }

     参考文章:http://web.jobbole.com/87968/

  • 相关阅读:
    不用服务器也能跑的框架wojilu
    PLI 到 COBOL 的转换数据类型 【不搞Mainframe的可能看不懂,冷门的语言】
    我记录网站综合系统 技术原理解析[8:ActionChecker流程]
    纪念VB.NET君
    我记录网站综合系统 技术原理解析[7:CSS类]
    我记录网站综合系统 技术原理解析[10:PermissionChecker流程]
    我记录网站综合系统 技术原理解析[6:内容初始化处理]
    我记录网站综合系统 技术原理解析[9:HttpMethodChecker流程]
    怎么打败腾讯[纯讨论]
    VisualStudio2012新特性[路边社通稿]
  • 原文地址:https://www.cnblogs.com/HappyYawen/p/8508292.html
Copyright © 2011-2022 走看看