


Was sind die Implementierungsmethoden des Sortierpakets in der Go-Sprache?
Go ist eine stark typisierte Sprache, ihr Code ist prägnant und leicht zu lesen und sie verfügt über eine effiziente Leistung, weshalb sie bei Entwicklern immer beliebter wird. Unter anderem ist das Sortierpaket ein wichtiger Bestandteil der Standardbibliothek der Go-Sprache. Es bietet Sortierfunktionen für Slices und benutzerdefinierte Sammlungstypen. In diesem Artikel wird die Implementierung des Sortierpakets in der Go-Sprache vorgestellt.
Die Definition der Schnittstelle sort.Interface im Sortierpaket lautet wie folgt:
type Interface interface { // 嵌入内置的len函数,返回集合元素个数 Len() int // 比较索引i和索引j上的元素 Less(i, j int) bool // 交换索引i和索引j上的元素 Swap(i, j int) }
Über diese Schnittstelle können wir einen benutzerdefinierten Typ von Sortieralgorithmus implementieren.
Im Sortierpaket sind drei Hauptsortiermethoden implementiert: Sortieren, Stabil und Slice, die im Folgenden einzeln vorgestellt werden.
1. Sortieren
Die Sortiermethode sortiert die eingehenden Slices und verwendet einen optimierten Schnellsortierungsalgorithmus. Aus dem Quellcode ist ersichtlich: Der Typ des Slice ist []Type, sodass Sie das Type-Slice verwenden können, um die Sort-Methode direkt aufzurufen (Type ist der interne Elementtyp des Slice).
func Sort(data Interface) { n := data.Len() quickSortFunc(n, swapFunc(data), maxDepth(n)) }
Die Sort-Methode ruft intern die Funktion quickSortFunc auf, um den Sortiervorgang auszuführen. Die Funktion ruft sich selbst rekursiv auf, bis die Rekursion abgeschlossen ist oder das geteilte Teilsegment zu klein ist.
// 快速排序 // n 为切片大小 // swap 为交换函数,可以通过sort.Interface中的swap方法来实现 func quickSortFunc(n int, swap swapFunc, maxDepth int) { // 插入排序,Num^1为偶数,&1可用来判断奇偶性 if n < insertionSortThreshold { for i := 1; i < n; i++ { for j := i; j > 0 && swap(j-1, j); j-- { } } return } if maxDepth == 0 { heapSortFunc(n, swap) return } maxDepth-- third := n / 2 // 选择枢纽元 if n > med3Threshold { m0 := 0 m1 := n / 2 m2 := n - 1 if n > 40 { s := n / 8 m0 = med3(swap, 0, s, 2*s) m1 = med3(swap, m1-s, m1, m1+s) m2 = med3(swap, n-1-2*s, n-1-s, n-1) } third = med3(swap, m0, m1, m2) } // 挖洞填数 // z正反代表着大或小于枢纽元素 z := n - 1 // p代表在枢纽元素左边的指针,q代表在枢纽元素右边的指针 p := 0 q := z for { for ; p < n && !swap(p, third); p++ { } for ; q >= 0 && swap(q, third); q-- { } if p >= q { break } swap(p, q) if p == third { third = q } else if q == third { third = p } p++ q-- } // 对子切片递归调用quickSortFunc函数 quickSortFunc(p, swap, maxDepth) quickSortFunc(n-p-1, swapFuncAt(swap, p+1), maxDepth) }
2. Die stabile Methode ist ein stabiler Sortieralgorithmus, der die relativen Positionen gleicher Elemente unverändert lassen kann. Bei dieser Operation werden hauptsächlich einige Slices, die nicht den Sortierregeln der Sort-Methode entsprechen, relativ geordnet sortiert, z. B. die Halbsortierung der Elemente in der Abbildung.
func Stable(data Interface) { // length 为切片长度 length := data.Len() // mergeSort函数就是归并排序 mergeSort(data, 0, length) }
Dieser Algorithmus ist nicht nur ein stabiler Sortieralgorithmus, sondern hat auch eine Komplexität von O(n log n).
3. Slice
Slice sortiert Unter-Slices, also Slices [Start, Ende). Mit dieser Methode können Sie alle von Slices unterstützten Iteratoren sortieren.
func Slice(slice interface{}, less func(i, j int) bool) { // 利用反射获取slice值信息 rv := reflect.ValueOf(slice) // 获取长度信息 vlen := rv.Len() // 初始化并调用SortInterface,参数为lessSlice reflect.Sort(newSortInterface(rv, makeLessSlice(less, vlen))) }
Es ist zu beachten, dass die Implementierung der Less-Funktionsmethode gemäß der Less-Methode von sort.Interface implementiert werden muss. Die Less-Funktion übergibt zwei Indizes i und j und gibt einen Bool-Wert zurück: Bestimmen Sie, ob das Element i ist kleiner als das Element j. Wenn ja, swap(i, j).
Das Obige ist eine kurze Implementierung des Sortierpakets in der Go-Sprache. Aus der obigen Einführung können wir ersehen, dass das Sortierpaket relativ einfach zu implementieren ist, aber eine effiziente Sortierleistung aufweist und Entwicklern auch großen Komfort bietet.
Das obige ist der detaillierte Inhalt vonWas sind die Implementierungsmethoden des Sortierpakets in der Go-Sprache?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



OpenSSL bietet als Open -Source -Bibliothek, die in der sicheren Kommunikation weit verbreitet sind, Verschlüsselungsalgorithmen, Tasten und Zertifikatverwaltungsfunktionen. In seiner historischen Version sind jedoch einige Sicherheitslücken bekannt, von denen einige äußerst schädlich sind. Dieser Artikel konzentriert sich auf gemeinsame Schwachstellen und Antwortmaßnahmen für OpenSSL in Debian -Systemen. DebianopensL Bekannte Schwachstellen: OpenSSL hat mehrere schwerwiegende Schwachstellen erlebt, wie z. Ein Angreifer kann diese Sicherheitsanfälligkeit für nicht autorisierte Lesen sensibler Informationen auf dem Server verwenden, einschließlich Verschlüsselungsschlüssel usw.

In dem Artikel wird erläutert, wie das PPROF -Tool zur Analyse der GO -Leistung verwendet wird, einschließlich der Aktivierung des Profils, des Sammelns von Daten und der Identifizierung gängiger Engpässe wie CPU- und Speicherprobleme.Character Count: 159

In dem Artikel werden Schreiben von Unit -Tests in GO erörtert, die Best Practices, Spottechniken und Tools für ein effizientes Testmanagement abdecken.

In der Bibliothek, die für den Betrieb der Schwimmpunktnummer in der GO-Sprache verwendet wird, wird die Genauigkeit sichergestellt, wie die Genauigkeit ...

Das Problem der Warteschlange Threading In Go Crawler Colly untersucht das Problem der Verwendung der Colly Crawler Library in Go -Sprache. Entwickler stoßen häufig auf Probleme mit Threads und Anfordern von Warteschlangen. � ...

Backend Learning Path: Die Erkundungsreise von Front-End zu Back-End als Back-End-Anfänger, der sich von der Front-End-Entwicklung verwandelt, Sie haben bereits die Grundlage von Nodejs, ...

In dem Artikel werden die Verwaltungs -Go -Modulabhängigkeiten über Go.mod erörtert, die Spezifikationen, Aktualisierungen und Konfliktlösung abdecken. Es betont Best Practices wie semantische Versioning und reguläre Updates.

In diesem Artikel werden eine Vielzahl von Methoden und Tools eingeführt, um PostgreSQL -Datenbanken im Debian -System zu überwachen, um die Datenbankleistung vollständig zu erfassen. 1. verwenden Sie PostgreSQL, um die Überwachungsansicht zu erstellen. PostgreSQL selbst bietet mehrere Ansichten für die Überwachung von Datenbankaktivitäten: PG_STAT_ACTIVITY: Zeigt Datenbankaktivitäten in Echtzeit an, einschließlich Verbindungen, Abfragen, Transaktionen und anderen Informationen. PG_STAT_REPLIKATION: Monitore Replikationsstatus, insbesondere für Stream -Replikationscluster. PG_STAT_DATABASE: Bietet Datenbankstatistiken wie Datenbankgröße, Transaktionsausschüsse/Rollback -Zeiten und andere Schlüsselindikatoren. 2. Verwenden Sie das Log -Analyse -Tool PGBADG
