美文网首页
排序算法

排序算法

作者: 杜子龙 | 来源:发表于2021-04-18 15:38 被阅读0次
堆排:
func heapSort(arr []int) {
    len := len(arr)
    for i := len/2 - 1; i >= 0; i-- {
        adjust(arr, i, len - 1)
    }
    for i := len - 1; i > 0; i-- {
        arr[0], arr[i] = arr[i], arr[0]
        adjust(arr, 0, i - 1)
    }
}
func adjust(arr []int, i, length int) {
    left := 2 * i + 1
    right := 2 * i + 2
    max := i
    if left <= length && arr[left] > arr[max]{
        max = left
    }
    if right <= length && arr[right] > arr[max]{
        max = right
    }
    if max != i{
        arr[max], arr[i] = arr[i], arr[max]
        adjust(arr, max, length)
    }
}
快排:
func quickSort(arr []int, left, right int) {
    if left >= right {
        return
    }
    l, r := left, right
    target := left
    for l < r {
        for l < r && arr[target] <= arr[r] {
            r--
        }
        for l < r && arr[target] >= arr[l] {
            l++
        }
        if l < r {
            arr[l], arr[r] = arr[r], arr[l]
        }
    }
    arr[target], arr[l] = arr[l], arr[target]
    quickSort(arr, left, l-1)
    quickSort(arr, l+1, right)
}
冒泡:
func bubbleSort(arr []int) {
    for i := 0; i < len(arr)-1; i++ {
        for j := 0; j < len(arr)-1-i; j++ {
            if arr[j] > arr[j+1] {
                arr[j], arr[j+1] = arr[j+1], arr[j]
            }
        }
    }
}
归并:

归并排序是稳定排序。每次合并操作的平均时间复杂度为O(n),而完全二叉树的深度为|log2n|。总的平均时间复杂度为O(nlogn)。而且,归并排序的最好,最坏,平均时间复杂度都是O(nlogn)。

func mergeSort(arr []int, left, right int){
    if left >= right{
        return
    }
    mid := (left + right) / 2
    mergeSort(arr, left, mid)
    mergeSort(arr, mid + 1, right)
    merge(arr, left, mid, right)
}
func merge(arr []int, left, mid, right int){
    tmp := make([]int, right - left + 1)
    i, j, t := left, mid + 1, 0
    for i <= mid && j <= right{
        if arr[i] <= arr[j]{
            tmp[t] = arr[i]
            i++
        }else{
            tmp[t] = arr[j]
            j++
        }
        t++
    }
    for i <= mid{
        tmp[t] = arr[i]
        i++
        t++
    }
    for j <= right{
        tmp[t] = arr[j]
        j++
        t++
    }
    t = 0
    for left <= right{
        arr[left] = tmp[t]
        left++
        t++
    }
}

相关文章

  • java实现快速排序、归并排序、希尔排序、基数排序算法...

    快速排序算法 归并排序算法 希尔排序算法 基数排序算法

  • web开发需要知道的几个算法

    算法分类 快速排序算法 深度优先算法 广度优先算法 堆排序算法 归并排序算法

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

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

  • 经典排序算法总结

    经典排序算法集锦 冒泡法 排序算法入门之冒泡排序 排序算法入门之冒泡排序优化

  • 前端算法学习-第一篇

    冒泡排序算法 冒泡排序算法是最慢的排序算法之一,也是最容易实现的排序算法。之所以叫冒泡排序是因为使用这种算法排序时...

  • 七大排序算法之冒泡排序

    七大排序算法之冒泡排序 @(算法笔记)[排序算法, 冒泡排序, C++实现] 冒泡排序介绍 冒泡排序是七大排序算法...

  • 算法-选择排序

    算 法:选择排序算法时间复杂度: 选择排序算法概述 选择排序伪代码 选择排序实现 选择排序算法概述 排序算法有许...

  • 浅谈排序算法

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

  • 线性排序

    桶排序、计数排序、基数排序 一、线性排序算法介绍 1.线性排序算法包括桶排序、计数排序、基数排序。2.线性排序算法...

  • 算法4:插入排序和选择排序算法的比较

    排序算法列表电梯: 选择排序算法:详见 《算法4》2.1 - 选择排序算法(Selection Sort), Py...

网友评论

      本文标题:排序算法

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