Eine kurze Diskussion des PHP-Quellcodes 26: Vereinfachung der PHP-Quick-Sort-Quellcode-Implementierung

不言
Freigeben: 2023-04-02 06:20:02
Original
1705 Leute haben es durchsucht

Dieser Artikel stellt hauptsächlich den PHP-Quellcode 26 vor: Vereinfachung der PHP-Schnellsortierungs-Quellcode-Implementierung. Jetzt kann ich ihn mit Ihnen teilen

Kurze Diskussion zum PHP-Quellcode 26: Vereinfachung der PHP-Quellcode-Implementierung für die schnelle Sortierung

Während dieser Zeit überprüfte ich die Datenstruktur und sah Sortierung und klassische Schnellsortierung
Also beschloss ich, es zu tun Schauen Sie sich die Implementierung der Sortierung in PHP an. Im Zend-Verzeichnis können wir die Datei zend_qsort.c und die Datei zend_qsort.h sehen.
Dies ist die Datei, in der PHP die schnelle Sortierung implementiert.
Aus dem Code können wir das Sehen Sie, dass es möglicherweise mit einer Vielzahl von Datentypen kompatibel ist, daher sind seine Austausch- und Vergleichspositionen komplizierter und es scheint komplizierter zu sein. Deshalb habe ich alle Typen in
in den Typ int geändert und einen erhalten vereinfachte Version der Schnellsortierung
im PHP-Quellcode Der Code lautet wie folgt:

#include <stdio.h> static qsort_swap(int *a, int *b){
int tmp;
tmp = *a;
*a = *b;
*b = tmp;} void qsort(int *base, int nmemb){
int *begin_stack[10];
int *end_stack[10];
int *begin;
int *end;
int *seg1;
int *seg2;
int *seg2p;
int loop;
unsigned int offset; /* 使用栈而不是常见的递归实现 */
begin_stack[0] = base;//开始元素位置栈,入栈
end_stack[0]   = base + (nmemb - 1) ;//结束位置栈,入栈 for (loop = 0; loop >= 0; --loop) {
begin = begin_stack[loop];//开始位置出栈
end   = end_stack[loop];//结束位置出栈 while (begin < end) {
offset = (end - begin) >> 1;//取中间位置 
qsort_swap(begin, begin + offset);//交换开始和中间的位置 
seg1 = begin;
seg2 = end; while (1) {
for (; seg1 < seg2 && *begin < *seg1 ; seg1 += 1); for (; seg2 >= seg1 && *seg2 > *begin; seg2 -= 1); if (seg1 >= seg2)
break; 
qsort_swap(seg1, seg2);
} 
qsort_swap(begin, seg2); 
seg2p = seg2; if ((seg2p - begin) <= (end - seg2p)) {
if (seg2p < end) {//右侧入栈
begin_stack[loop] = seg2p + 1;
end_stack[loop++] = end;
}
end = seg2p;
} else {
if (seg2p > begin) {// 左侧入栈
begin_stack[loop] = begin;
end_stack[loop++] = seg2p - 1;
}//end if
begin = seg2p;
}//end if
}//end while
}//end for }int main(int argc, char *argv[]){
int a[10] = {14, 5, 7, 8, 2, 4, 55, 3};
int i;
qsort(a, 8);
for (i = 0; i < 8;i++) 
{
printf("%d ", a[i]);
}
return 0;}
Nach dem Login kopieren

Nachdem ich das gelesen habe, habe ich das Gefühl: Leistungsstarke Zeiger sind ein großer Vorteil!

Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass er für das Studium aller hilfreich ist. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website.

Verwandte Empfehlungen:

Eine kurze Diskussion zum PHP-Quellcode 25: Über die nächsten, aktuellen Schlüsselfunktionen

Eine kurze Diskussion des PHP-Quellcodes 24: Analyse der Gründe, warum die Iteration nicht abgeschlossen werden kann, wenn der Wert in der Iteratorimplementierung falsch ist

Das obige ist der detaillierte Inhalt vonEine kurze Diskussion des PHP-Quellcodes 26: Vereinfachung der PHP-Quick-Sort-Quellcode-Implementierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage