基础排序算法

120 阅读1分钟

排序算法是算法学习中最基础的内容,在这里也是一次算法学习的记录

名词解释:

  • 时间复杂度:在计算机科学中,时间复杂性,又称时间复杂度,算法的时间复杂度是一个函数,它定性描述该算法的运行时间。这是一个代表算法输入值的字符串的长度的函数。时间复杂度常用大O符号表述,不包括这个函数的低阶项和首项系数。
  • 空间复杂度: 空间复杂度是对一个算法在运行过程中临时占用存储空间大小的一个量度,同样反映的是一个趋势,用 S(n) 来定义。
  • n: 数据规模
  • k: “桶”的个数
  • In-palce:占用常数内存,不占用额外内存
  • Out-place:占用额外内存
  • 稳定性:排序后 2 个相等键值的顺序和排序之前它们的顺序相同
  1. 冒泡排序
function bubbleSort(arr) {
    for(let i=0; i<arr.length - 1; i++) {
        for(let j=0; j<arr.length - 1; j++) {
            if(arr[j] > arr[j+1]) {
                let temp = arr[j+1];
                arr[j+1] = arr[j];
                arr[j] = temp;
            }
        }
    }
    return arr
}
时间复杂度空间复杂度稳定性排序方式
O(n²)O(1)稳定In-place
  1. 选择排序
function selectionSort(arr) {
    let minIndex, temp
    for(let i=0; i<arr.length -1; i++) {
        minIndex = i;
        for(let j=i+1; j<arr.length; j++) {
            if(arr[j] < arr[minIndex]) {
                minIndex = j;
            }
        }
        temp = arr[i];
        arr[i] = arr[minIndex];
        arr[minIndex] = temp;
    }
    return arr
}
时间复杂度空间复杂度稳定性排序方式
O(n²)O(1)不稳定In-place
  1. 插入排序
function insertionSort(arr) {
    var len = arr.length;
    var preIndex, current;
    for (var 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;
}
时间复杂度空间复杂度稳定性排序方式
O(n²)O(1)稳定In-place
  1. 归并排序
  1. 快速排序
  1. 希尔排序
  1. 基数排序
  1. 计数排序
  1. 堆排序
  1. 桶排序