English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Análise do método de ordenação do array conforme regra específica em problemas de algoritmos do Golang

Este exemplo mostra como ordenar um array conforme uma regra específica em Golang. Compartilho com todos para referência, conforme a seguir:

forneça uma matriz bidimensional, ordene esta matriz bidimensional pela coluna i (i começa de1iniciar) ordenação, se a coluna i for igual, ordena as linhas iguais pela coluna i+1os elementos da coluna são ordenados,

se o elemento da coluna i+1os elementos da coluna também forem iguais, continua a comparar a coluna i+2coluna, e assim por diante, até a última coluna. Se as colunas de i até a última forem iguais, então são ordenadas pela ordem original.

entrada de exemplo:

1,2,3
2,3,4
2,3,1
1,3,1

ordenar pela2ordenar por coluna, saída:

1,2,3
2,3,1
1,3,1
2,3,4

implementação do código:

package huawei
import (
    "fmt"
    "ordenar"
)
func Test09Base() {
    nums := [][]int{{1, 2, 3}, {2, 3, 4}, {2, 3, 1}, {1, 3, 1}}
    firstIndex := 2 //ordenar pela segunda coluna
    result := arraySort(nums, firstIndex-1)
    fmt.Println(result)
}
//ordenar nums conforme a regra especificada (notação: este firstIndex começa em 0)
func arraySort(nums [][]int, firstIndex int) [][]int {
    //verificar
    if len(nums) <= 1 {
        return nums
    }
    if firstIndex < 0 || firstIndex > len(nums[0])-1 {
        fmt.Println("Aviso: O parâmetro firstIndex deve estar entre 0 e len(nums)-1A array original é retornada.
        return nums
    }
    //ordenar
    mIntArray := &IntArray{nums, firstIndex}
    sort.Sort(mIntArray)
    return mIntArray.mArr
}
type IntArray struct {
    mArr       [][]int
    firstIndex int
}
//IntArray implementa a interface sort.Interface
func (arr *IntArray) Len() int {
    return len(arr.mArr)
}
func (arr *IntArray) Swap(i, j int) {
    arr.mArr[i], arr.mArr[j] = arr.mArr[j], arr.mArr[i]
}
func (arr *IntArray) Less(i, j int) bool {
    arr1 := arr.mArr[i]
    arr2 := arr.mArr[j]
    for index := arr.firstIndex; index < len(arr1); index++ {
        if arr1[index] < arr2[index] {
            return true
        } else if arr1[index] > arr2[index] {
            return false
        }
    }
    return i < j
}

Espero que o que é mencionado neste artigo ajude a todos a programar em Go.

Declaração: o conteúdo deste artigo é extraído da internet, pertence ao respectivo proprietário, foi submetido e carregado voluntariamente pelos usuários da internet, este site não possui direitos de propriedade, não foi editado manualmente e não assume responsabilidade legal. Se você encontrar conteúdo suspeito de violação de direitos autorais, bem-vindo a enviar e-mail para: notice#oldtoolbag.com (ao enviar e-mail, substitua # por @ para denunciar e forneça provas. Se confirmado, o site deletará imediatamente o conteúdo suspeito de violação de direitos autorais.)

Você também pode gostar