zoukankan      html  css  js  c++  java
  • 交换排序

    交换排序

    通过比较关键字,然后交换


    1. 冒泡排序

    • 时间复杂度 O(n^2)
    • 思路:
      1. 两两比较,大的那个放在最右边,比较到最末尾之后,最右边 即 最大
      2. 第二轮的比较中,将最大的排开,即 len -= 1,后面几轮也同样如此
      3. 最大的那个就会像冒泡一样,一个一个像最右靠
    function BubbleSort(list) {
      let i, len, temp;
    
      for (len = list.length; len > 0; --len) {
        // 每次循环都会让一个当前数列中的最大值冒泡到最右边,即 下一次循环 最右边的数 无需比较,所以 len 每次循环都递减一次
        for (i = 0; i < len - 1; ++i) {
          if (list[i] > list[i + 1]) {
            temp = list[i + 1];
            list[i + 1] = list[i];
            list[i] = temp;
          }
          // console.log(++count);
        }
      }
    }
    

    2. 快速排序

    • 时间复杂度 O(n logn),空间复杂度(log n)
    • 思路:
      1. 任取一个元素(一般为第一个)为 中心,
      2. 比 其 小的都放左边,大的都放右边,形成左右 两个 子数列
      3. 对 各子数列 重复上述两步,直到每个子表元素只剩下一个
    function QuickSork(list, low, high) {
      if (low >= high) {
        return;
      }
      let i = low;
      let j = high;
      let temp = list[low];
      while (i < j) {
        while (i < j && temp <= list[j]) {
          --j;
        }
        list[i] = list[j];
        while (i < j && temp >= list[i]) {
          ++i;
        }
        list[j] = list[i];
      }
      list[i] = temp;
      QuickSork(list, low, i - 1);
      QuickSork(list, i + 1, high);
    }
    
  • 相关阅读:
    APICloud学习笔记之图片缓存
    正则表达式笔记01
    hahah
    panel 绑定鼠标滚轮事件
    C#无边框窗体移动 将事件绑定到想实现的控件上
    消消看最高分破解
    字符串补齐
    ant android打包--学习第一弹
    Windsock套接字I/O模型学习 --- 第三章
    Lua 垃圾收集机制
  • 原文地址:https://www.cnblogs.com/pengnima/p/12626533.html
Copyright © 2011-2022 走看看