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\t", 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\n", 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]

posted @ 2021-01-21 16:00  倦鸟已归时  阅读(385)  评论(0编辑  收藏  举报