美文网首页GolanggoGo
go实现冒泡,选择,插入,快排的排序的原理和算法

go实现冒泡,选择,插入,快排的排序的原理和算法

作者: 女神经柒月 | 来源:发表于2018-11-21 23:57 被阅读98次

import (
    "fmt"
)

// 冒泡排序
func bSort(a []int) {
    // 第一个循环,对每一个元素制定一个冒泡
    for i := 0; i < len(a); i++ {
        // 第二个循环是对每一个元素进行冒泡具体操作,每一趟排序排好一个,那么可以len-i
        for j := 1; j < len(a)-i; j++ {
            // 从大到小, 当上面的数比下面的数要大,那么交换两者,
            if a[j] > a[j-1] {
                a[j-1], a[j] = a[j], a[j-1]
            }
            // 从小到大,当上面的数比下面的数要小,那么交换两者
            // if a[j] < a[j-1] {
            //  a[j-1],a[j] = a[j],a[j-1]
            // }
        }
    }
}

// 选择排序
func sSort(a []int) {
    // 第一个循环,对每一个元素制定一个冒泡
    for i := 0; i < len(a); i++ {
        // 定义一个最小值的下标
        // 拿到一个i,认为是最小的,然后给后面的剩余的数进行比较
        var min int = i
        for j := i + 1; j < len(a); j++ {
            // 如果发现,a[min]这一项是小的,那么交换位置,把小的放到后面,因为j是随着i越来越大的,
            if a[min] < a[j] {
                min = j
            }
        }
        // 每次都要交换一下数
        a[min], a[i] = a[i], a[min]
    }
}

// 选择排序的第二种方式
func s2Sort(a []int) {
    // 第一个循环,对每一个元素制定一个冒泡
    for i := 0; i < len(a); i++ {
        for j := i + 1; j < len(a); j++ {
            // 如果发现,a[min]这一项是小的,那么交换位置,把小的放到后面,因为j是随着i越来越大的,
            if a[i] > a[j] {
                // 每次都要交换一下数
                a[j], a[i] = a[i], a[j]
            }
        }

    }
}

// 插入排序
// 原理, 从小到大为例子, 把一个数组分成2部分,,每次用第二部分的数去比较第一部分数,如果大,那么不交换,否则的话交换位置
func iSort(a []int) {
    for i := 1; i < len(a); i++ {
        for j := i; j > 0; j-- {
            if a[j] > a[j-1] {
                break
            } else {
                a[j], a[j-1] = a[j-1], a[j]
            }
        }
    }

}

// 快速排序
// 原理
// 递归+分治
// 每次都可以固定一个元素的最终的位置,
// 1. 把一个元素的最终位置给确定了,
// 2. 这样子该最终位置的元素的两边各自有一个数组,
// 3. 分别对两边的数组进行重复上面的操作,
// 4. 当只有一个元素的数组的时候,那么就算该位置结束了
func qSort(a []int, left, right int) {
    if left >= right {
        return
    }
    val := a[left]

    k := left
    // 确定val所在的位置
    for i := left + 1; i <= right; i++ {
        if a[i] < val {
            a[k] = a[i]
            a[i] = a[k+1]
            k++
        }
    }

    a[k] = val
    qSort(a, left, k-1)
    qSort(a, k+1, right)

}
func main() {
    a := [...]int{1, 110, 221, 2, 2, 3, 1}
    qSort(a[:], 0, len(a)-1)
    fmt.Println(a)

}

相关文章

  • PHP算法系列教程(一)-四大排序算法

    PHP算法系列教程(一)-四大排序算法 冒泡 冒泡排序原理图 选择 选择排序原理图 插入 插入排序原理图 快排 快...

  • 常用排序算法

    常见排序算法 本文介绍6种常用排序算法,包括冒泡、选择、插入、快排、堆排、希尔排序。下面从排序算法的原理、解题步骤...

  • JavaScript实现排序算法

    实现了冒泡,选择,插入,快排,希尔,归并 冒泡排序 选择排序 插入排序 快速排序 希尔排序 归并排序

  • OC中的排序算法

    目录 冒泡排序、快速排序、选择排序、插入排序 冒泡 快排 选择 插入

  • go实现冒泡,选择,插入,快排的排序的原理和算法

  • 几个排序算法的比较

    手写快排,算法练习题 借用SDL的库,来演示一下几个排序算法的效果:依次测试了 "快排、选择、插入和冒泡"。 废话...

  • all

    算法与数据结构 常见算法类型 排序算法(冒泡、插入、选择、快排、希尔、堆排、归并、桶排、基数、计数)、字符串操作、...

  • 五种常见排序算法实现(Java)

    Java-五种排序算法实现 前言及准备 这篇我们会介绍比较简单的五种排序算法:插入排序、冒泡排序、快速排序、选择排...

  • 常见排序的java实现

    常见排序的java实现 常见排序java实现 插入排序(二分插入排序) 希尔排序 快速排序(三数中值快排) 冒泡排...

  • 基础排序算法总结

    排序算法分为内部排序和外部排序,而我们经常说的基础排序算法,都是内部排序算法。包括冒泡排序,选择排序,插入排序,快...

网友评论

    本文标题:go实现冒泡,选择,插入,快排的排序的原理和算法

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