Bagikan melalui


qsort

Melakukan pengurutan cepat. Versi fungsi ini yang lebih aman tersedia; lihat qsort_s.

Sintaks

void qsort(
   void *base,
   size_t number,
   size_t width,
   int (__cdecl *compare )(const void *, const void *)
);

Parameter

base
Awal array target.

number
Ukuran array dalam elemen.

width
Ukuran elemen dalam byte.

compare
Penunjuk ke rutinitas yang disediakan pengguna yang membandingkan dua elemen array dan mengembalikan nilai yang menentukan hubungan mereka.

Keterangan

Fungsi ini qsort mengimplementasikan algoritma pengurutan number cepat untuk mengurutkan array elemen, masing-masing width byte. Argumen base adalah penunjuk ke dasar array yang akan diurutkan. qsort menimpa array ini dengan menggunakan elemen yang diurutkan.

qsortcompare memanggil rutinitas satu atau beberapa kali selama pengurutan, dan meneruskan penunjuk ke dua elemen array pada setiap panggilan. Jika compare menunjukkan dua elemen sama, urutannya dalam array yang diurutkan yang dihasilkan tidak ditentukan.

compare(const void *elem1, const void *elem2);

Rutinitas membandingkan elemen dan mengembalikan salah satu nilai berikut.

Membandingkan nilai pengembalian fungsi Deskripsi
< 0 elem1 Kurang elem2
0 elem1 setara dengan elem2
> 0 elem1 lebih besar dari elem2

Array diurutkan dalam urutan yang meningkat, seperti yang didefinisikan oleh fungsi perbandingan. Untuk mengurutkan array dalam urutan yang menurun, balikkan rasa "lebih besar dari" dan "kurang dari" dalam fungsi perbandingan.

Fungsi ini memvalidasi parameternya. Jika compare atau number adalah NULL, atau jika base adalah NULL dan number bukan nol, atau jika width kurang dari nol, handler parameter yang tidak valid dipanggil, seperti yang dijelaskan dalam Validasi parameter. Jika eksekusi diizinkan untuk melanjutkan, fungsi akan kembali, dan errno diatur ke EINVAL.

Secara default, status global fungsi ini dicakup ke aplikasi. Untuk mengubah perilaku ini, lihat Status global di CRT.

Persyaratan

Rutin Header yang diperlukan
qsort <stdlib.h> dan <search.h>

Untuk informasi kompatibilitas selengkapnya, lihat Kompatibilitas.

Contoh

// crt_qsort.c
// arguments: every good boy deserves favor

/* This program reads the command-line
* parameters and uses qsort to sort them. It
* then displays the sorted arguments.
*/

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

int compare( const void *arg1, const void *arg2 );

int main( int argc, char **argv )
{
   int i;
   /* Eliminate argv[0] from sort: */
   argv++;
   argc--;

   /* Sort remaining args using Quicksort algorithm: */
   qsort( (void *)argv, (size_t)argc, sizeof( char * ), compare );

   /* Output sorted list: */
   for( i = 0; i < argc; ++i )
      printf( " %s", argv[i] );
   printf( "\n" );
}

int compare( const void *arg1, const void *arg2 )
{
   /* Compare all of both strings: */
   return _stricmp( * ( char** ) arg1, * ( char** ) arg2 );
}
boy deserves every favor good

Baca juga

Mencari dan mengurutkan
bsearch
_lsearch