[GO] [C] Verwenden Sie qsort ()

Übe, API zu lernen. Wenn Sie ein Array sortieren, das auch leere Elemente in aufsteigender Reihenfolge enthält, Der Rohling kommt zum Anfang.

Wenn Sie nicht möchten, dass Leerzeichen verglichen werden Sortieren Sie, indem Sie die Länge des Arrays angeben.

qsort(table, 4, sizeof(table[0]), compare_char); Teil 4 von ist anwendbar.

qsort.c


#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int compare_char(const void* left, const void* right) {
	char *left_char = (char *)left;
	char *right_char = (char *)right;

	return strcmp( left_char, right_char );
}

int main() {

	int i=0;
	char table[10][20] = { 
		"123",
		"A0",
		"Z0",
		"9w3"
	};

	for(i=0; i<10; i++) {
		printf("%d %s\n", i, table[i]);
	}

	printf(" --- sort\n");
	
	qsort(table, 4, sizeof(table[0]), compare_char);
	
	for(i=0; i<10; i++) {
		printf("%d %s\n", i, table[i]);
	}
}

Qsort () 2014-03-09 entsprechend dem Array von Zeigern hinzugefügt

In Reaktion auf den hervorgehobenen Kommentar wurde er so geändert, dass die Vergleichsfunktion des aufgerufenen Ziels die Typinformationen des Objekts genau empfängt. Außerdem wurde der Code so geändert, dass das Ende des Arrays mit "NULL" definiert und das Ende des Zeichenarrays erkannt werden kann.

qsort-withPointer.c


#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int compare_char(const void* left, const void* right) {

    const char *left_char = *(const char **)left;
    const char *right_char = *(const char **)right;

    return strcmp( left_char, right_char );
}

int main() {

    int i=0;
    //Entspricht dem Platzieren eines Zeichenfolgenliteral in einem Array
    const char* s0 = "123";
    const char* s1 = "A0";
    const char* s2 = "Z0";
    const char* s3 = "9w3";

    //Wache am Ende des Arrays(NULL)Platz
    const char* table[] = {s0, s1, s2, s3, NULL};

    printf(" --- original\n");

    // table[]Zähle die Elemente von
    //Inkrementieren Sie den Zähler, bis er einen NULL-Wert findet, der das Ende des Arrays darstellt
    i=0;
    while(table[i]) {
        printf("%d %s\n", i, table[i]);
        i++;
    }

    printf(" --- sort\n");

    qsort(table, i, sizeof(*table), compare_char);

    i=0;
    while(table[i]) {
        printf("%d %s\n", i, table[i]);
        i++;
    }
}

Recommended Posts

[C] Verwenden Sie qsort ()
Verwenden Sie reguläre Ausdrücke in C.
Verwenden Sie ernsthaft den stärksten C / C ++ - Indexer "Rtags".
Verwendung von Google Test in C-Sprache
Verwenden Sie DeepLabCut
Verwenden Sie pycscope
Verwenden Sie Sammlungen
Verwenden Sie: Django-MySQL
Verwenden Sie Pylements.rb
Verwenden Sie Numpy
Verwenden Sie Pandas-Ply
Verwenden von C ++ - Funktionen aus Python mit pybind11
Verwenden Sie GitPython
Verwenden Sie Miniconda
Verwendung der C-Bibliothek in Python
Verwenden Sie eine Skriptsprache für ein komfortables C ++ - Leben
Wickeln Sie C mit Cython für Python ein
Python> Verwenden Sie c Quick Swap> #if 1 // keine Umformung
Wrap C ++ mit Cython zur Verwendung von Python