zoukankan      html  css  js  c++  java
  • 排序算法(冒泡、快排、插入)

    1.冒泡排序:【O(n2)复杂度】

    let arr = [100, 52, 42, 122, 11];
    // 冒泡排序,跟相邻的相比较
    function bubbleSort (arr) {
    let len = arr.length;
    while (len) {
    for (let i =0; i < len-1; i++) {
    if (arr[i] > arr[i+1]) {
    [arr[i], arr[i+1]] = [arr[i+1], arr[i]]
    }
    }
    len --;
    }
    return arr
    }
    bubbleSort(arr);

    2.插入排序【O(n2)复杂度】
    function inserSort (arr) {
    // 和冒泡差不多从后往前插入
    for(let j = 1; j < arr.length; j++) {
    for(let i = j; i > 0; i--) {
    if (arr[i] < arr[i-1]) {
    [arr[i-1], arr[i]] = [arr[i], arr[i-1]]
    } else {
    break
    }
    }
    }
    return arr;
    }
    inserSort(arr);
    3.快速排序==>易理解标识位法则【O(logn)复杂度】
    function querySort(arr) {
    let flag = arr[0];
    let left = [];
    let right = [];
    if (arr.length <=1) {
    return arr;
    }
    for(let i =1;i<arr.length; i++) {
    if(arr[i] < flag) {
    left.push(arr[i])
    } else {
    right.push(arr[i])
    }
    }
    return querySort(left).concat(flag,querySort(right))
    }
    querySort(arr);
    4.快速排序 =》 指针法则:同理找出一个flag,数组头尾各安放一个指针l ,类似交叉替换;
    function querySortNext(arr, l = 0, r = arr.length-1) {
    if (l>r) {
    return
    }
    let left = l;
    let right = r;
    let flag = arr[l];
    while (left < right) {
         // 右面指针如果大于等于标识位,就往前挪动,左边指针同理
    if (left < right && arr[right] >= flag) {
    right--;
    }
    arr[left] = arr[right]
    if (left < right && arr[left] <= flag) {
    left++;
    }
    arr[right] = arr[left]
    }
    arr[left] = flag;
    querySortNext(arr, l,left - 1);
    querySortNext(arr, left+1,right);
    return arr;
    }
    querySortNext(arr);
  • 相关阅读:
    UE4 UnLoadStreamLevel
    UE4 Xml读写
    UE4 保存为bitmap
    C++ 不定参数(转)
    C++ 默认参数(转载)
    Tuple初探
    遗传算法matlab实现
    蚁群算法matlab实现
    汉诺塔问题C++实现
    较优H圈matlab实现
  • 原文地址:https://www.cnblogs.com/wangxinyubokeyuan/p/15130829.html
Copyright © 2011-2022 走看看