美文网首页算法
2、golang快速排序改进版

2、golang快速排序改进版

作者: 发条家的橙子 | 来源:发表于2019-08-16 15:50 被阅读0次
package main

import (
    "fmt"
    "math/rand"
)

// 如果数量小于13直接用插入排序
func SortForMerge(arr []int, left, right int) {
    for i:=left; i<=right; i++ {
        temp := arr[i]
        var j int
        for j=i; j>left && temp < arr[j-1]; j-- {
            arr[j] = arr[j-1]
        }
        arr[j] = temp
    }
}

func swap(arr []int,i, j int)  { // 数据交换
    arr[i], arr[j] = arr[j], arr[i]
}

func QuickSortX(arr []int, left, right int) {
    if right - left < 2 {
        SortForMerge(arr, left, right) // 如果数量小于3直接用插入排序
    } else { // 使用快速排序
        // 随机找一个数字
        swap(arr, left, rand.Int()%(right-left+1) + left )
        vdata := arr[left] // 坐标数据,比我小往左,大往右
        lt := left // < vdata
        gt := right + 1 // > vdata
        i := left+1 // == vdata
        for i < gt {
            if arr[i] > vdata {
                swap(arr, gt-1, i) //移动到大于的地方
                gt--
            } else if arr[i] < vdata {
                swap(arr, i, lt+1) //移动到小于的地方
                lt++    //前进循环
                i++
            } else {
                i++
            }
        }
        swap(arr, lt, left)
        QuickSortX(arr, left, lt-1) //递归处理小于那一段
        QuickSortX(arr, gt, right) //递归处理大于那一段
    }
}



func main()  {
    arr := []int{3, 5, 2, 1, 5, 6, 9, 0}
    fmt.Println("排序前:", arr)
    QuickSortX(arr, 0 , len(arr)-1)
    fmt.Println("排序后:", arr)
}

相关文章

  • 2、golang快速排序改进版

  • 快速排序 --- 基础实践篇

    本篇主要介绍快速排序的基本代码。 大纲 普通版的快速排序 改进版的快速排序 快速排序应用----求前K个最大的数 ...

  • JAVA 实现快速排序

    高效的分治排序 快速排序是冒泡排序的改进版,是目前已知的最快的排序方法。 ...

  • Java八大排序简述

    1.冒泡排序 改进版: 2.选择排序 3.插入排序 4.希尔排序 5.快速排序 6.堆排序 7.归并排序 8.基数...

  • 快速排序算法的实现( Golang 和 Python )

    Python 中一行代码搞定快排 Python 快速排序 Golang 快速排序

  • 从头开始复习算法之快速排序

    前面说到了三种简单的排序和归并排序,今天中午就开始来谈一谈我理解的快速排序。快速排序是前面冒泡排序的一个改进版本,...

  • 快速排序和归并排序

    1、快速排序 快速排序是冒泡排序的改进版,也是最好的一种内排序,在很多面试题中都会出现,也是作为程序员必须掌握的一...

  • 快速排序

    简述:快速排序是冒泡排序的改进版,也是好的一种内排序(内排序是指将待排序数列完全放入内存中进行排列的过程,适合不太...

  • golang快速排序

    1.任意选取一个基值nums[0],本例选择第一个nums[0]2.对比第一个值和第二个值nums[1]大小;如果...

  • Golang快速排序

    版权所有,转载请注明:http://www.lenggirl.com/language/go-quicksort....

网友评论

    本文标题:2、golang快速排序改进版

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