美文网首页
排序算法总结

排序算法总结

作者: 知识分享share | 来源:发表于2020-03-25 22:24 被阅读0次

冒泡排序


function maopao(arr){
      let  len = arr.length
      for (let i = 0; i < len-1; i++) {
          for (let j = i; j < len-1-i; j++) {
                if(arr[j]>arr[j+1]){
                  let temp = arr[j]
                  arr[j] = arr[j+1]
                  arr[j+1] = temp
                }
          }
      }
      return arr
}
// console.log(maopao([4,1,2,5,7]))

选择排序


function selectSort(arr){
      let len = arr.length
      let minIndex
      let temp
      for (let i = 0; i < len-1; i++) {
            minIndex = i
            for (let j = 1+i; j < len; j++) {
                  if(arr[j]<arr[minIndex]){
                        minIndex = j
                  }
            }
            temp = arr[i]
            arr[i] = arr[minIndex]
            arr[minIndex] = temp
      }
      return arr
}
// console.log(selectSort([3,1,2,5,3,8]))

插入排序


function insertSort(arr){
      let len = arr.length
      let preIndex
      let current
      let temp
      for (let i = 1; i < len; i++) {
            preIndex = i-1
            current =arr[i] 
            while(preIndex>=0&&arr[preIndex]>current){
                  arr[preIndex+1] = arr[preIndex]
                  preIndex--
            }
            arr[preIndex+1] = current
      }
      return arr
}
// console.log(insertSort([3,1,5,2,6]))

归并排序


function mergeSort(arr){
      let len = arr.length
      if(len<2){
            return arr
      }
      let middle = Math.floor(len/2)
      let left = arr.slice(0,middle)
      let right = arr.slice(middle)
     return merge(mergeSort(left),mergeSort(right))
}
function merge(left,right){
      var result = []
      while(left.length && right.length){
            if(left[0]<=right[0]){
                  result.push(left.shift())
            }else{
                  result.push(right.shift())
            }
      }
      while(left.length){
            result.push(left.shift())
      }
      while(right.length){
            result.push(right.shift())
      }
     return result
}

希尔排序


function shellSort(arr){
      let len = arr.length
      let temp
      let gap = 1
      while(gap<len/3){
            gap = gap*3+1
      }
      for (gap; gap>0; gap = Math.floor(gap/3)) {
            for (let i = gap; i < len; i++) {
                  temp = arr[i]
                  let j
                  for ( j = i-gap; j>=0&&arr[j]>temp; j-=gap) {
                        arr[j+gap] = arr[j]
                  }
                  arr[j+gap] = temp
            }
      }
      return arr
}
// console.log(shellSort([3,1,2,5,4,6,9,7]))

快速排序


function quickSort(arr){
    let len = arr.length
    if(len<2){
        return arr
    }
    let pivotIndex = Math.floor(len/2)
    let pivot = arr.splice(pivotIndex,1)[0]
    let left = []
    let right = []
    arr.forEach(e => {
        if(e<pivot){
            left.push(e)
        }else{
            right.push(e)
        }
    });
    return quickSort(left).concat(pivot,quickSort(right))
}
// console.log(quickSort([4,2,6,1,8,7]))

堆排序


function swap(A,i,j){
    let temp = A[i]
    A[i] = A[j]
    A[j] = temp
}
function shiftDown(A,i,length){
    let temp = A[i]
    for (let j=2*i+1; j<length; j=2*j+1) {
        temp = A[i]
        if(j+1<length&&A[j]<A[j+1]){
            j++
        }
        if(temp<A[j]){
            swap(A,i,j)
            i=j
        }else{
            break
        }        
    }
}
function heapSort(A){
    for(let i=Math.floor(A.length/2-1);i>=0;i--){
        shiftDown(A,i,A.length);
    }
    for (let i = Math.floor(A.length-1); i>0;i--) {
        swap(A,0,i)
        shiftDown(A,0,i)
    }
}
var aa = [5,1,3,6,3,7,5]
heapSort(aa)
console.log(aa)

相关文章

  • iOS算法总结-堆排序

    iOS算法总结-堆排序 iOS算法总结-堆排序

  • iOS算法总结-冒泡排序

    iOS算法总结-冒泡排序 iOS算法总结-冒泡排序

  • 算法学习(1)-排序算法

    八大排序算法九大排序算法再总结[经典排序算法][集锦][直观学习排序算法] 视觉直观感受若干常用排序算法 快速排序...

  • 面试常问的排序算法

    排序算法总结 排序是算法问题中的经典问题。为什么要总结排序算法呢?你懂的 : (假设所有的排序都是要求最终结果为:...

  • 浅谈排序算法

    排序算法有很多种,今天先谈谈一些简单的排序算法。包括桶排序、冒泡排序和快速排序算法。后期总结各种排序算法。 桶排序...

  • 排序算法

    一、排序算法总结 排序算法题目 排序算法快速排序堆排序归并排序 应用最小K个数(TopK问题)215.数组中的第K...

  • 一文搞定十大经典排序算法(Java实现)

    本文总结十大经典排序算法及变形,并提供Java实现。参考文章:十大经典排序算法总结(Java语言实现)快速排序算法...

  • Swift的十大经典排序算法总结

    Swift的十大经典排序算法总结 排序算法是《数据结构与算法》中最基本的算法之一。排序算法可以分为内部排序和外部排...

  • 算法-排序算法总结

    排序类型总结 1 排序算法基础实现 2 排序算法应用 2.1 基础排序 2.2 计数排序应用 2.3 快排应用 2...

  • 排序算法最强总结及其代码实现(Python/Java)

    前言 本文总结了常用的全部排序算法,内容包括: 排序算法的定义和思路 排序算法的代码实现:Python和Java,...

网友评论

      本文标题:排序算法总结

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