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]

  • 相关阅读:
    LeetCode 461. Hamming Distance
    LeetCode 442. Find All Duplicates in an Array
    LeetCode 448. Find All Numbers Disappeared in an Array
    LeetCode Find the Difference
    LeetCode 415. Add Strings
    LeetCode 445. Add Two Numbers II
    LeetCode 438. Find All Anagrams in a String
    LeetCode 463. Island Perimeter
    LeetCode 362. Design Hit Counter
    LeetCode 359. Logger Rate Limiter
  • 原文地址:https://www.cnblogs.com/zhaoke271828/p/14308543.html
Copyright © 2011-2022 走看看