中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

模擬qsort實現冒泡排序

發布時間:2020-04-25 15:35:32 來源:網絡 閱讀:313 作者:wx5c85282666e5e 欄目:編程語言

1.數組指針
數組指針是指針,指針指向數組,其內部保存的是數組的地址,只要是指針,就占4個字節。
比如:

      int arr[5]; //數組
      int *parr1[10]; //指針數組
      int (*parr2)[10];//數組指針
      int (*parr3[10])[5]; //數組指針數組
    解釋:命名規則按照操作符的優先級來決定。

2.函數指針和定義

  • 定義:函數指針是指向函數的指針變量。
  • 用途:調用函數和做函數的參數
  • 聲明方法:返回值類型(*指針變量名)([形參列表])
    比如:
        #include <stdio.h>
        void test()
        {  
          printf("hehe\n"); 
        } 
          int main()
       {  
         printf("%p\n", test);
         printf("%p\n", &test); 
        return 0;
       } 

    運行結果:
    模擬qsort實現冒泡排序
    輸出的是兩個地址,這兩個地址是 test 函數的地址。 那我們的函數的地址要想保存起來,怎么保存? 下面我們看代 碼:

    void test()
    { 
     printf("hehe\n"); 
         } //下面pfun1和pfun2哪個有能力存放test函數的地址? 
    void (*pfun1)(); 
    void *pfun2();

    首先,能給存儲地址,就要求pfun1或者pfun2是指針,那么答案就是:pfun1可以存放。pfun1先和*結合,說明pfun1是指針,指針指向的是一個函數,指向的函數無參數,返回值 類型為void。
    3.函數指針數組和定義,轉移表

  • 定義:把函數的地址存到一個數組中,那這個數組就叫函數指針數組。
  • 用途:轉移表
  • 聲明方法:函數返回值類型(*數組名[ ])( )
    比如:
    
     int (*parr1[10]])(); //函數指針數組
     int *parr2[10](); //指針函數數組

4.指向函數指針數組的指針和定義

  • 定義:指向函數指針數組的指針是一個指針 指針指向一個數組,數組的元素都是函數指針;
    比如:
    void test(const char* str) 
    {  
    printf("%s\n", str);
    }
    int main() 
     {  
    //函數指針pfun 
    void (*pfun)(const char*) = test;  
    //函數指針的數組pfunArr 
    void (*pfunArr[5])(const char* str);
    pfunArr[0] = test;  //指向函數指針數組pfunArr的指針ppfunArr  
    void (*(*ppfunArr)[10])(const char*) = &pfunArr;
    return 0; 
    }

    5.回調函數的使用
    回調函數就是一個通過函數指針調用的函數。如果你把函數的指針(地址)作為參數傳遞給另一個函數,當這 個指針被用來調用其所指向的函數時,我們就說這是回調函數。
    注:回調函數不是由該函數的實現方直接調用,而 是在特定的事件或條件發生時由另外的一方調用的,用于對該事件或條件進行響應。
    7.使用qsort函數排序各種類型的數據。

    #include <stdio.h> 
    #include<stdlib.h>
    //qosrt函數的使用者得實現一個比較函數 
    int int_cmp(const void * p1, const void * p2) 
    {   
    return (*( int *)p1 > *(int *) p2);
    } 
    int main()
    {    
    int arr[] = { 1, 3, 5, 7, 9, 2, 4, 6, 8, 0 }; 
    int i = 0;    
    qsort(arr, sizeof(arr) / sizeof(arr[0]), sizeof (int), int_cmp); 
    for (i = 0; i< sizeof(arr) / sizeof(arr[0]); i++)  
    {      
    printf( "%d ", arr[i]);   
    } 
    printf("\n");
    system("pause");
    return 0;
    }

    運行結果:
    模擬qsort實現冒泡排序
    8.模仿qsort的功能實現一個通用的冒泡排序。

    #include <stdio.h> 
     int int_cmp(const void * p1, const void * p2)
    {   
    return (*( int *)p1 > *(int *) p2); 
    } 
    void _swap(void *p1, void * p2, int size) 
    {     
    int i = 0; 
    for (i = 0; i< size; i++) 
    {  
     char tmp = *((char *)p1 + i);   
    *(( char *)p1 + i) = *((char *) p2 + i);   
    *(( char *)p2 + i) = tmp;   
    }
    } 
    void bubble(void *base, int count , int size, int(*cmp )(void *, void *)) 
     { 
     int i = 0; 
     int j = 0;   
     for (i = 0; i< count - 1; i++) 
    {   
      for (j = 0; j<count-i-1; j++)     
     {       
        if (cmp ((char *) base + j*size , (char *)base + (j + 1)*size) > 0)     
         {                
            _swap(( char *)base + j*size, (char *)base + (j + 1)*size, size);         
         }   
     }  
    } 
    } 
    int main() 
    {   
    int arr[] = { 1, 3, 5, 7, 9, 2, 4, 6, 8, 0 };   
    int i = 0;   
    bubble(arr, sizeof(arr) / sizeof(arr[0]), sizeof (int), int_cmp); 
    for (i = 0; i< sizeof(arr) / sizeof(arr[0]); i++)  
    {    
      printf( "%d ", arr[i]); 
    }     
    printf("\n");
    return 0;
    }

    運行結果:
    模擬qsort實現冒泡排序

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

芮城县| 通渭县| 萍乡市| 房产| 广河县| 渝北区| 高州市| 灵台县| 堆龙德庆县| 宜宾县| 阿拉善右旗| 吉隆县| 永嘉县| 梁河县| 循化| 华宁县| 尚义县| 汉寿县| 正安县| 旅游| 皋兰县| 廉江市| 仙桃市| 共和县| 延安市| 晴隆县| 平度市| 泰州市| 合肥市| 涞水县| 岗巴县| 全南县| 汾西县| 都匀市| 宁都县| 辛集市| 东源县| 淮北市| 定日县| 黄骅市| 马鞍山市|