zoukankan      html  css  js  c++  java
  • Go语言 插入排序并返回排序前的索引

      Go语言的sort包内置了四种算法:插入排序,堆排序,快速排序,归并排序。不过刚学,也不会自己实现接口,现在需要获取排序前的索引:也就是排序后的数组元素在排序前的什么位置。插入排序比较简单,就用插入排序实现一下。

      只要在排序函数里面生命一个自然数递增的索引数组,在对原数组排序的时候顺便给索引数组也排序一下,然后返回这个[]int的索引就好了。

    (都用切片操作(不是数组))

    package main
    
    import (
        "fmt"
    )
    
    // 排序的同时返回其排序前索引
    func sort(array []float64) []int {
        var n int = len(array)
        var index []int
        for i := 0; i < n; i++ {
            index = append(index, i)
        }
        // fmt.Println(index)
        // fmt.Println("数组array的长度为:", n)
        if n < 2 {
            return nil
        }
        for i := 1; i < n; i++ {
            // fmt.Printf("检查第%d个元素%f	", i, array[i])
            var temp float64 = array[i]
            var tempIndex = index[i]
            var k int = i - 1
            for k >= 0 && array[k] > temp {
                k--
            }
            for j := i; j > k+1; j-- {
                array[j] = array[j-1]
                index[j] = index[j-1]
            }
            // fmt.Printf("其位置为%d
    ", k+1)
            array[k+1] = temp
            index[k+1] = tempIndex
        }
        return index
    }
    
    func main() {
        var array []float64 = []float64{3, 44, 38, 5, 47, 15, 36, 26, 27, 2, 46, 4, 19, 50, 48}
        var index []int = sort(array)
        fmt.Println(array)
        fmt.Println(index)
    }

    结果:

    排序后的数组:[2 3 4 5 15 19 26 27 36 38 44 46 47 48 50]

    排序前的位置:[9 0 11 3 5 12 7 8 6 2 1 10 4 14 13]

  • 相关阅读:
    安装和使用 PyInstaller 遇到的问题
    Mininet 系列实验(七)
    Mininet 系列实验(六)
    Mininet 系列实验(五)
    Mininet 系列实验(三)
    Mininet 系列实验(一)
    Linux进程间通信(消息队列/信号量+共享内存)
    bugku 输入密码查看flag
    bugku 头等舱
    bugku 你必须让他停下
  • 原文地址:https://www.cnblogs.com/zhaoke271828/p/14308543.html
Copyright © 2011-2022 走看看