golang 快速排序

golang 快速排序

package main

import (
    "fmt"
    "strconv"
)

func quickSort(arr []int, low, high int) {
    if low < high {
        var pivot = partition(arr, low, high)
        quickSort(arr, low, pivot)
        quickSort(arr, pivot + 1, high)
    }
}
func partition(arr []int,low,high int) int  {
    var pivot = arr[low]
    var i = low
    var j= high
    // 6 5 4 3 2 1
    // 6 1 2 3 4 7
    for i< j{
        for arr[j] >= pivot && j > low {
            j--
        }
        //
        for arr[i]<= pivot && i<high{
            i++
        }
        if i<j {
            arr[i],arr[j]=arr[j],arr[i]
        }
    }
    arr[low],arr[j] = arr[j],pivot
    //
    return j
}

func printArray(arr []int) {
    for i := 0; i < len(arr); i++ {
        fmt.Print(strconv.Itoa(arr[i]) + " ")
    }
    fmt.Println("")
}

func main() {
    var arr = []int { 15, 3, 12, 6, -9, 9, 0,8,8 }
    fmt.Print("Before Sorting: ")
    printArray(arr)
    quickSort(arr, 0, len(arr) - 1)
    fmt.Print("After Sorting: ")
    printArray(arr)
}

参考文件:

最常用的排序-快速排序

Quick Sort Algorithm in Go Programming

原文地址:https://blog.51cto.com/9406836/2475185

时间: 2024-08-08 09:55:27

golang 快速排序的相关文章

golang快速排序算法

go语言真的是很简洁,下面用它来实现快速排序算法 package qsort func quickSort(values []int, left int, right int) { if left < right { temp := values[left] i, j := left, right for { for values[j] > temp { j-- } for values[i] < temp { i++ } if i >= j { break } values[i]

2、golang之快速排序

1.快速排序稳定性 快速排序是不稳定的算法,它不满足稳定算法的定义. 算法稳定性 -- 假设在数列中存在a[i]=a[j],若在排序之前,a[i]在a[j]前面:并且排序之后,a[i]仍然在a[j]前面.则这个排序算法是稳定的! 2.快速排序时间复杂度 快速排序的时间复杂度在最坏情况下是O(N2),平均的时间复杂度是O(N*lgN). 这句话很好理解:假设被排序的数列中有N个数.遍历一次的时间复杂度是O(N),需要遍历多少次呢?至少lg(N+1)次,最多N次. (01) 为什么最少是lg(N+1

使用Golang实现的快速排序

一.舞动的快速排序 在实现排序算法前,先让我们来欣赏一段关于快速排序的视频,本段视频展示了快速排序的原理,如果没有看懂,请看完本文后再回头来看一下,应该就明白了吧. O(∩_∩)O~ 二.快速排序实现 2.1 快速排序基础版 通过下面一组数据,将最左边的数设定为轴,并记录其值为 s. (注意:*表示要交换的数,[]表示轴) [41] 24 76* 11 45 64 21 69 19 36* [41] 24 36 11 45* 64 21 69 19* 76 [41] 24 36 11 19 64

[golang] 数据结构-快速排序

快速排序是个非常经典.高效.常用的排序算法.很多语言标准库里的排序算法都有用到它. 原理快排原理其实比较简单,就是将原本很大的数组拆成小数组去解决问题.要拆就得找个拆的位置.如果吧这个位置称为支点,那么快速排序问题就变成了不断的去找到拆分的支点元素位置.通常找支点就是以某个元素为标准,分别从最右侧元素向左找到比指定元素小的位置,再从最左侧开始向右找比指定元素大的位置.如果两个位置不相同就交换两个位置,在继续分表从两头相向寻找.找到合适的位置就是我们需要的支点.支点两边的元素再各自重复上面的操作,

golang数据结构之快速排序

具体过程:黑色标记代表左指针,红色标记代表右指针,蓝色标记代表中间值.(依次从左往向下) //QuickSort 快速排序 func QuickSort(left int, right int, arr *[7]int) { l := left r := right pivot := arr[(left+right)/2] tmp := 0 for l < r { for arr[l] < pivot { l++ } for arr[r] > pivot { r-- } if l >

Go语言golang调用sort.Slice实现struct切片的快速排序

sort.Slice声明 func Slice(slice interface{}, less func(i, j int) bool) { rv := reflectValueOf(slice) swap := reflectSwapper(slice) length := rv.Len() quickSort_func(lessSwap{less, swap}, 0, length, maxDepth(length)) } 实际使用 和C++的sort模板类似,只需要实现less函数,Go特

Golang基础学习总结

1.不支持继承 重载 ,比如C++Java的接口,接口的修改会影响整个实现改接口的类行为的修改,Go 设计者认为这一特点或许根本没用. 2.必任何函数定义必须花括号跟在函数声明后面而不能换行 如 func  funca(a int){},在Go语言中 函数也是一种类型 可以被推导  使用支持匿名函数 和闭包. 函数的返回值支持多重返回类似Python , 如果不赋值  整数类型默认 0     浮点数类型默认0.0   error类型 默认是nil 3.不用的包一定不要引入,这是Go的原则,就如

golang插件

本文记载下了golang插件的用法, 原文: https://code.tutsplus.com/tutorials/writing-plugins-in-go--cms-29101 这个例子使用了两个排序: 快速排序和冒泡排序,不追求算法的高效,只为了说明插件的生成和使用. 而且只在linux下,build和运行.(windows环境没有测试过, 原文在windows下要使用docker) 目录: plugins├── bubble_sort│   └── bubble_sort_plugin

一个让业务开发效率提高10倍的golang库

一个让业务开发效率提高10倍的golang库 此文除了是标题党,没有什么其他问题. 这篇文章推荐一个库,https://github.com/jianfengye/collection. 这个库是我在开发业务过程中 Slice 的频繁导致业务开发效率低,就产生了要做一个 Collection 包的想法.本文说说我开发这个库的前因后果 Golang 适不适合写业务? 最近一个逻辑非常复杂的业务,我用 Golang 来开发.开发过程不断在问一个问题,Golang 适不适合写业务? 业务说到底,是一大