qsort學習小結

之前學習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的實現。
相關文章
相關標籤/搜索