zoukankan      html  css  js  c++  java
  • javascript 数组排序

     javascript 数组排序

    一、冒泡法排序

    废话不说  直接撸

    function bubbleSort(arr){
    for (let i=1;i<arr.length;i++){
    for (let j=0;j<arr.length;j++){
    //打印不排序的情况
    console.log('arr['+i+']= ' + arr[i] + ' arr[' + j+']= ' + arr[j] );
    if(arr[i]>arr[j]){
    //一言不合就排序(对调两个值)
    let d=arr[j];
    arr[j]=arr[i];
    arr[i]=d;
    //打印排序的情况
    console.log('arr['+i+']= ' + arr[i] + ' arr[' + j+']= ' + arr[j] + ' 交换值');
    }
    //打印一下变换后的数组
    console.log(arr);
    }
    }
    return arr;
    }
    console.log(bubbleSort([9,5,6,4,1]));

    看下输出情况。。。

    很清晰吧 从第二位开始每一位上的数组都和其他数字比较,大的就冒泡(换位到前面);

    以下是看了前端早读课后修改的(才发现上面方法不是正宗的....)

    ---------------------------------------------------------------------------------------------------------------------------

     1     let arr1 = [3,5,6,4,1];
     2     class arrSort{
     3         bubbleSort(arr){
     4             let [len,i,j,] = [arr.length];
     5             for (i = 0; i < len - 1; i++) {
     6                 for (j = 0; j < len - 1 - i; j++) {
     7                     console.log('arr[' + j + ']= ' + arr[j] + ' arr[' + (j + 1) + ']= ' + arr[j + 1]);
     8                     if (arr[j] > arr[j + 1]) {
     9                         let temp = arr[j + 1];
    10                         arr[j + 1] = arr[j];
    11                         arr[j] = temp;
    12                         console.log('arr[' + j + ']= ' + arr[j] + ' arr[' + (j + 1) + ']= ' + rr[j + 1] + ' 交换值');
    13                     }
    14                     console.log(arr);
    15                 }
    16             }
    17             return arr;
    18         }
    19     }
    20     let arrSort1 = new arrSort;
    21     console.log(arrSort1.bubbleSort(arr1));

    看看输出结果:

    实现的思路:

            1.依次比较相邻的两个数,如果第一个比第二个小,不变。如果第一个比第二个大,调换顺序。一轮下来,最后一个是最大的数

            2.对除了最后一个之外的数重复第一步,直到只剩一个数

    相比之下后面的方法比较的次数少了好多...这才是正宗的冒泡法....

    二、选择法排序

    实现的思路:

            1.找出最小的数,和第一个交换位置

            2.在余下的里面找最小的数,放在第二个位置

            3.依次类推,排除顺序

    三、插入法排序

    实现的思路:

            1.依次比较相邻的两个数,如果第一个比第二个小,不变。如果第一个比第二个大,调换顺序。一轮下来,最后一个是最大的数

            2.对除了最后一个之外的数重复第一步,直到只剩一个数

    四、快速排序

    实现的思路:

            1.依次比较相邻的两个数,如果第一个比第二个小,不变。如果第一个比第二个大,调换顺序。一轮下来,最后一个是最大的数

            2.对除了最后一个之外的数重复第一步,直到只剩一个数

    五、对象数组排序

     1 function by(property) {
     2             return function (o,p) {
     3                 var a,b;
     4                 if(o && p && typeof o === 'object' && typeof p === 'object'){
     5                     //这里是关键代码 为a,b赋值,赋值分别为对象o、p的一个key!
     6                     a = o[property];
     7                     b = p[property];
     8 
     9                     if(a === b){
    10                         return 0;
    11                     }
    12                     if(typeof a === typeof b){
    13                         return a < b ? -1 :1;
    14                     }
    15                     return typeof a < typeof b ? -1 :1;
    16                 }else{
    17                     throw('error');
    18                 }
    19             }
    20         }

        调用:someArray.sort(by(property));

  • 相关阅读:
    计算器类(C++&JAVA——表达式转换、运算、模板公式)
    使用/\_ 打印正三角形 C/C++
    Triangle2D类(Java)
    让键盘输入不影响界面的动态效果(C++)
    Java 7.21 游戏:豆机(C++&Java)
    Java 7.35 游戏:猜字游戏(C++&Java)
    Java 8.9 游戏:井字游戏(C++&Java)
    JAVA 8.20 游戏:四子连(Java&C++)
    简易Java文本编译器(C++)
    PAT 1089 狼人杀-简单版(20 分)(代码+测试点分析)
  • 原文地址:https://www.cnblogs.com/cdut007/p/7344862.html
Copyright © 2011-2022 走看看