美文网首页
手写冒泡排序

手写冒泡排序

作者: 宏_4491 | 来源:发表于2021-03-30 12:16 被阅读0次

冒泡排序的原理:不断比较相邻元素,如果前一个比后一个大,就元素交换,直到没有需要比较的元素。

function bubbleSort(arr) {
    let len = arr.length;
    if(len >= 1) {
        for(let i = 0;i < len - 1; i++) {
            for(let j = 0;j < len - 1 - i; j++) {
                if(arr[j] > arr[j + 1]) {
                    let temp = arr[j + 1];
                    arr[j + 1] = arr[j];
                    arr[j] = temp;
                }
            }
        }

    }
    return arr;
}

优化后的

function bubbleSort(arr) {
  let len = arr.length;
  let lastExchangeIndex = 0;
  //无序数列的边界,每次比较只需要比到这里为止
  let sortBorder = len - 1;
  if(len >= 1) {
      for(let i = 0;i < len; i++) {
          //有序标记,每一轮的初始是true
          let isSorted = true;
          for(let j = 0;j < sortBorder - i; j++) {
              if(arr[j] > arr[j + 1]) {
                  let temp = arr[j + 1];
                  arr[j + 1] = arr[j];
                  arr[j] = temp;
                  //有元素交换,所以不是有序,标记变为false
                  isSorted = false;
                  //把无序数列的边界更新为最后一次交换元素的位置
                  lastExchangeIndex = j;
              }
          }
          sortBorder = lastExchangeIndex;
          if(isSorted) { //有序,跳出循环
              break;
          }
      }

  }
  return arr;
}

选择排序的原理:每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。

function selectSort(arr) {
    var len = arr.length;
    var minIndex, temp;
    for (var i = 0; i < len - 1; i++) {
        minIndex = i;
        for (var j = i + 1; j < len; j++) {
            if (arr[j] < arr[minIndex]) {  //寻找最小的数
                minIndex = j;   //将最小数的索引保存
            }
        }
        temp = arr[i];
        arr[i] = arr[minIndex];
        arr[minIndex] = temp;
    }
    return arr;
}

快速排序的原理:在数组中找到基准点(比如中间位置的数字),其他数与之比较,新建两个数组,小于基准点的数存储在左边数组,大于基准点的数存储在右边数组,拼接数组,然后左边数组与右边数组继续比较存储,直到最后完成数组排序。

function quickSort(arr){        
    if(arr.length<=1){            
        return arr  // 如果数组长度小于或等于1,则直接返回数组
    } 
    // 找到数组中间的索引,如果是浮点数,则向下取整  
    var num = Math.floor(arr.length/2);  
    var centerVal = arr.splice(num,1);  // 找到数组中间索引的值
    var left = [];        
    var right = [];        
    for(var i=0;i<arr.length;i++){            
        if(arr[i]<centerVal){
            left.push(arr[i])  // 基准点左边的数放到左边数组
        }else{
            right.push(arr[i]) // 基准点右边的数放到右边数组
        }
    }    // 利用concat拼接数组,并调用sort方法
    return sort(left).concat([centerVal],sort(right)) 
}

相关文章

  • 常见的算法

    冒泡排序算法 冒泡排序作为一种最为常见的排序算法,很多企业的笔试当中经常出现,通常要求你手写冒泡排序,因此,...

  • 算法

    排序算法有哪些?最快的排序算法是哪个?手写一个冒泡排序手写快速排序代码快速排序的过程、时间复杂度、空间复杂度手写堆...

  • 7.4-全栈Java笔记:三种经典算法

    冒泡排序算法 冒泡排序是最常用的排序算法,在笔试中也非常常见,能手写出冒泡排序算法可以说是基本的素养。 算法重复地...

  • 算法

    排序算法有哪些? 最快的排序算法是哪个? 手写一个冒泡排序 手写快速排序代码 快速排序的过程、时间复杂度、空间复杂...

  • 手写冒泡排序

    冒泡排序的原理:不断比较相邻元素,如果前一个比后一个大,就元素交换,直到没有需要比较的元素。 优化后的 选择排序的...

  • Java--冒泡排序算法

      冒泡排序是最常用的排序算法,在笔试中也非常常见,能手写出冒泡排序算法可以说是基本的素养。  算法重复地走访过要...

  • 面试常见算法题你会多少?

    罗列一下常见算法题 看看你会多少?后续会更新上解析 排序算法有哪些?最快的排序算法是哪个?手写一个冒泡排序手写快速...

  • 算法-冒泡排序

    算 法:冒泡排序算法时间复杂度: 冒泡排序算法概述 冒泡排序伪代码 冒泡排序实现 冒泡排序算法概述 冒泡排...

  • iOS 常遇到的面试算法题

    1、手写代码实现一个冒泡排序? 2、手写代码实现一个选择排序? 3、动态规划,1毛、3毛、5毛硬币找零的问题? 4...

  • 详解排序算法--插入排序和冒泡排序

    冒泡排序插入排序插入排序和冒泡排序分析 冒泡排序 冒泡排序(英语:Bubble Sort,台湾另外一种译名为:泡沫...

网友评论

      本文标题:手写冒泡排序

      本文链接:https://www.haomeiwen.com/subject/agbwhltx.html