首页 > 其他分享 >Go-快速排序

Go-快速排序

时间:2022-12-15 12:25:04浏览次数:40  
标签:10 arr mid high low Go 排序 快速 append

package main

import (
    "fmt"
    "math/rand"
)

//3,9,2,8,1,7,4,6,5,10
//3  9,2,8,1,7,4,6,5,10
//  2,1    3,     9,2,8,,7,4,6,5,10

// 9,2,8,,7,4,6,5,10
// ,8,7,4,6,5   9  10
//4 5 6

func QuickSort(arr []int) []int {
    length := len(arr) //数组长度
    if length <= 1 {
        return arr //一个元素的数组,直接返回
    } else {
        splitdata := arr[0]          //以第一个为基准
        low := make([]int, 0, 0)     //存储比我小的
        high := make([]int, 0, 0)    //存储比我大的
        mid := make([]int, 0, 0)     //存储与我相等
        mid = append(mid, splitdata) //加入第一个相等

        for i := 1; i < length; i++ {
            if arr[i] < splitdata {
                low = append(low, arr[i])
            } else if arr[i] > splitdata {
                high = append(high, arr[i])
            } else {
                mid = append(mid, arr[i])
            }
        }
        low, high = QuickSort(low), QuickSort(high) //切割递归处理
        myarr := append(append(low, mid...), high...)
        return myarr
    }
}

func QuickSort2(arr []int) []int {
    length := len(arr) //数组长度
    if length <= 1 {
        return arr //一个元素的数组,直接返回
    } else {
        //n:=length-1//n>=0  && n<=length-1
        n := rand.Int() % length
        splitdata := arr[n]          //以第一个为基准
        low := make([]int, 0, 0)     //存储比我小的
        high := make([]int, 0, 0)    //存储比我大的
        mid := make([]int, 0, 0)     //存储与我相等
        mid = append(mid, splitdata) //加入第一个相等

        for i := 0; i < length; i++ {
            if i == n {
                continue
            }
            if arr[i] < splitdata {
                low = append(low, arr[i])
            } else if arr[i] > splitdata {
                high = append(high, arr[i])
            } else {
                mid = append(mid, arr[i])
            }
        }
        low, high = QuickSort(low), QuickSort(high) //切割递归处理
        myarr := append(append(low, mid...), high...)
        return myarr
    }
}

func main() {
    arr := []int{3, 9, 2, 8, 1, 7, 4, 6, 5, 10}
    //fmt.Println(SelectSortMax(arr))
    fmt.Println(QuickSort2(arr))

}

 

标签:10,arr,mid,high,low,Go,排序,快速,append
From: https://www.cnblogs.com/Essaycode/p/16984679.html

相关文章

  • Go-冒泡排序
    packagemainimport"fmt"//11,9,2,8,3,7,4,6,5,10//911283746510//921183746510//928113746510//928311746510//9283......
  • Go-堆排序
    packagemainimport"fmt"funcHeapSort(arr[]int)[]int{length:=len(arr)fori:=0;i<length;i++{lastmesslen:=length-i//......
  • 如何快速理解信号与槽?
    一、信号与槽的定义(一)定义信号(Signal)和槽((Slot)是Qt中的核心机制,也是在PyQt编程中对象之间进行通信的机制。在Qt中,每一个QObject对象和PyQt中所有继承自QWidget的控件(......
  • Go--并发编程
    摘抄(有删改):https://www.topgoer.cn/docs/golang/chapter09-1一、并发介绍1.1进程和线程进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位......
  • vue+django项目nginx部署在https下
    vue+django项目nginx部署在https下1.问题出现这个问题的原因是在https网站下浏览器不允许发送http请求。由于django默认是http,所以肯定会报这个错误,如果网站部署在http......
  • 如何快速拥有好的测试idea
    如果接手任意一个测试任务,如何开始测试以及怎么快速的形成测试点呢?其实也是有一套小套路的。大概整理了下,可以从6个方面来考虑入手。1.项目快速了解项目背景、......
  • 如何快速从使用Eclipse转用IDEA
    ​​https://www.toutiao.com/i6515289836159500804/#6649976-tsina-1-44054-4471e2b057b5019ad452c722f04bba39​​1.先来看快捷键上的异同:2.其他常用快捷键:ALT+回车:错误自......
  • chaosblade-exec-os项目的burnio.go文件解读
    #################################################代码位置:​​https://github.com/chaosblade-io/chaosblade-exec-os.git​​文件位置:chaosblade-exec-os/exec/bin/burn......
  • gorilla/mux
    ##############地址:​​https://github.com/gorilla/mux​​   安装goget-ugithub.com/gorilla/mux 使用添加包引用:"github.com/gorilla/mux" 常用方法介绍初始化路......
  • Go语言性能剖析利器--pprof实战
    作者:耿宗杰前言关于pprof的文章在网上已是汗牛充栋,却是千篇一律的命令介绍,鲜有真正实操的,本文将参考Go社区资料,结合自己的经验,实战Go程序的性能分析与优化过程。优化思路首......