<delect id="sj01t"></delect>
  1. <em id="sj01t"><label id="sj01t"></label></em>
  2. <div id="sj01t"></div>
    1. <em id="sj01t"></em>

            <div id="sj01t"></div>
            C語言

            C語言中qsort快速排序使用實例

            時間:2025-04-11 21:23:30 C語言 我要投稿
            • 相關推薦

            C語言中qsort快速排序使用實例

              大家想知道在C語言中qsort是如何快速排序的嗎?下面小編為大家整理了C語言中qsort快速排序使用實例,希望能幫到大家!

              簡單的介紹如下。

              復制代碼 代碼如下:

              /*****************************

              qsort原型:

              void qsort( void *base, size_t num, size_t width,

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

              base:數組首地址

              num: 數組元素個數

              width: 每個數組元素字節數

              compare:比較函數 注意類型轉換

              *****************************/

              #include

              #include //strcmp函數

              #include //qsort函數

              #include //fabs(double),abs(int)

              int intcmp(const void*i1,const void *i2)

              {

              return *(int*)i1-*(int*)i2;

              }

              int doublecmp(const void *d1,const void *d2)

              {

              //return *(double*)d1 - *(double*)d2;//出現錯誤 double不精確的

              double tmp=*(double*)d1 - *(double*)d2;

              if(fabs(tmp) < 0.000001)

              return 0;

              else

              return tmp>0 ? 1 : -1;

              }

              int stringcmp(const void *str1,const void *str2)

              {

              return strcmp(*(char**)str1,*(char**)str2);

              /*

              這里為什么是 *(char**)呢?比較函數的參數都是數組元素的地址。

              如果是 int[],那么其元素就是int.傳入的&int[i],那么要比較的話,void *i1轉換

              為 int*的在取值。一樣,對于字符串數組而言,char*s[]其內存放的就是各個串的首地址。

              char*.所以轉換為void *后。其為&(char*)。所以要從void *轉換回去比較。就要用到二級指針(char**)str1,

              確保str1進過一次尋址后,*str1后為char*.可參見msdn例子。

              */

              }

              void main()

              {

              printf("---------------------C中qsort使用方法(默認遞增)----------------------n");

              int a[]={1,2,6,8,10,7,9,40,12,6,7};

              printf("-------int[]數組qsort測試-------nbefore sort:n");

              for(int i=0;i!=sizeof(a)/sizeof(int);i++)

              printf("%d ",a[i]);

              qsort(a,sizeof(a)/sizeof(int),sizeof(a[0]),intcmp);

              printf("nafter sort:n");

              for(int i=0;i!=sizeof(a)/sizeof(int);i++)

              printf("%d ",a[i]);

              printf("n");

              printf("-------double[]數組qsort測試-------nbefore sort:n");

              double d[]={1.12,1.1236,1.36,1.2456,2.48,2.24123,-2.3,0};

              for(int i=0;i!=sizeof(d)/sizeof(double);i++)

              printf("%f ",d[i]);

              qsort(d,sizeof(d)/sizeof(double),sizeof(d[0]),doublecmp);

              printf("nafter sort:n");

              for(int i=0;i!=sizeof(d)/sizeof(double);i++)

              printf("%f ",d[i]);

              printf("n");

              printf("-------string: char*[]數組qsort測試-------nbefore sort:n");

              char *str[]={"hello","hi","you","are","baby"};

              for(int i=0;i!=sizeof(str)/sizeof(str[0]);i++)

              printf("%s ",str[i]);

              printf("nafter sort:n");

              qsort(str,sizeof(str)/sizeof(str[0]),sizeof(str[0]),stringcmp);

              for(int i=0;i!=sizeof(str)/sizeof(str[0]);i++)

              printf("%s ",str[i]);

              printf("n");

              }

            【C語言中qsort快速排序使用實例】相關文章:

            C語言中使用快速排序算法對元素排序的實例06-20

            C語言快速排序實例代碼10-30

            c語言中關于使用BF-KMP算法實例10-15

            C 語言中宏的使用08-02

            C語言中Swift函數調用實例09-25

            C語言中實現KMP算法實例08-09

            C語言冒泡排序算法實例06-15

            C++選擇排序算法實例09-26

            C#排序算法之快速排序09-09

            <delect id="sj01t"></delect>
            1. <em id="sj01t"><label id="sj01t"></label></em>
            2. <div id="sj01t"></div>
              1. <em id="sj01t"></em>

                      <div id="sj01t"></div>
                      黄色视频在线观看