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

Análisis del método de ordenación de arrays según las reglas especificadas en problemas de algoritmos de Golang

Este ejemplo ilustra el método de ordenamiento de array según reglas específicas en Golang. Compartimos con todos para referencia, como se muestra a continuación:

Proporcione un array bidimensional, ordene este array bidimensional según la columna i (i comienza1comienzo) ordenar, si la columna i es igual, se ordenan las filas iguales según la columna i+1elementos de la columna se ordenan,

Si el i+1elementos de la columna también son iguales, se sigue comparando el i-ésimo+2columnas, y así sucesivamente, hasta la última columna. Si las columnas del i-ésimo al último son iguales, se ordena según el orden original.

Ejemplo de entrada:

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

ordenar por la2ordenar columnas, salida:

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

Implementación del 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 por la segunda columna
    result := arraySort(nums, firstIndex-1)
    fmt.Println(result)
}
//Ordenar nums según las reglas especificadas (nota: este firstIndex comienza en 0)
func arraySort(nums [][]int, firstIndex int) [][]int {
    //revisar
    if len(nums) <= 1 {
        return nums
    }
    if firstIndex < 0 || firstIndex > len(nums[0])-1 {
        fmt.Println("Advertencia: El parámetro firstIndex debe estar entre 0 y len(nums)-1. Se devuelve el array original.")
        return nums
    }
    //ordenar
    mIntArray := &IntArray{nums, firstIndex}
    sort.Sort(mIntArray)
    return mIntArray.mArr
}
type IntArray struct {
    mArr [][]int
    firstIndex int
}
//IntArray implementa la interfaz 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 lo descrito en este artículo sea útil para el diseño de programas en Go.

Declaración: El contenido de este artículo se obtiene de la red, pertenece al propietario original, se carga y contribuye de manera autónoma por los usuarios de Internet. Este sitio no posee los derechos de propiedad, no realiza procesamiento editorial humano y no asume responsabilidades legales relacionadas. Si encuentra contenido sospechoso de infracción de derechos de autor, le invitamos a enviar un correo electrónico a: notice#w3Deje un correo electrónico en codebox.com (reemplace # con @) para denunciar, y proporcione evidencia relevante. Una vez verificada, este sitio eliminará inmediatamente el contenido sospechoso de infracción.

Te gustará