之前學習C語言的時候,老是本身寫排序函數。
如今用庫函數qsort()實現對數組的排序。
qsort() 定義在 stdlib.h. 。 原型以下:void qsort(void *base, size_t nmemb, size_t size, int(*compar)(const void *, const void *)); 其中,base是數組的起始位置的指針,nmemb是將排序的元素的個數,size是每一個元素的大小,compar是一個比較函數,這個要本身寫的。 若是要對一個×××數組進行排序,那麼,base就是數組名,nmemb就是要排序的元素的個數,size就是sizeof(int), compar要本身寫。 int comp(const void * a, const void * b) { int * tempa = (int *)a;//先把a轉化爲和數組名同類型的指針。 、//由於在這裏,數 組名是int *型的, //因此咱們把a轉化成int *型。 int * tempb = (int *)b;//同上 return *tempa - *tempb; //至關於取元素的值進行比較。 //若是是字符串的話,要用strcmp //升序,若是要降序,要用第二個和第一個比。 } 下面看三個例子程序。 #include <stdio.h> #include <stdlib.h> int values[] = { 40, 10, 100, 90, 20, 25 }; int compare (const void * a, const void * b) { return ( *(int*)a - *(int*)b ); /*先把a轉化成了數組名的類型,而後取值。再把b轉化成數組名的類型,再取值。 此處爲升序。若是return ( *(int*)b - *(int*)a );,則爲降序。*/ } int main () { int n; qsort (values, 6, sizeof(int), compare); for (n=0; n<6; n++) printf ("%d ",values[n]); return 0; } #include <stdlib.h> #include <string.h> #include <stdio.h> int compare( const void *arg1, const void *arg2 ); int compare1(const void * a, const void * b); int main( int argc, char **argv ) { char a[255]="18AWSD723adasdf649"; //int k=strlen(a); qsort((void *)a,(size_t)strlen(a),sizeof(char),compare1); printf ("%s\n",a); qsort((void *)a,(size_t)strlen(a),sizeof(char),compare); printf ("%s\n",a); return 0; } int compare( const void *arg1, const void *arg2 ) { //return -(((char *)arg1)[0]-((char*)arg2)[0]);//降序,這個值取負則爲升序 return ((char*)arg1)[0] - ((char*)arg2)[0]; } int compare1(const void * a, const void * b) { return *((char*)a)-*((char*)b); } 其中compare和compare1完成的工做徹底同樣,只不過表示方法不同。 #include<stdlib.h> #include <string.h> #include <stdio.h> static int comp(const void * ele1, const void * ele2) { return strcmp(*(const char ** ) ele1, *(const char** )ele2); } int compare(const void * a, const void * b) { return strcmp(*((char **)a), *((char **)b)); } int main() { char* str[5]= { "sdf", "fff", "ttt", "12aaa", "erefrerw" }; int i=0; qsort(str, 5, sizeof(char*), compare) ; for(i=0; i<5; i++) printf("%s\n",str[i]); return 0; } 其中comp和compare完成的工做同樣。注意用的是strcmp. 在qsort中,反覆調用qsort的第四個參數指向的函數。 http://www.jbox.dk/sanos/source/lib/qsort.c.html 上面的連接是在網上搜到的一種qsort的實現。