快速排序的簡單應用及回調函數的初步理解

/*快速排序的簡單應用及回調函數的初步理解
注:只是應用快速排序的算法
回調函數: 回調函數就是一個通過函數指針調用的函數。如果你把函數的指針(地址)作爲參數傳遞給另一個函數,當這個指針被用來調用其所指向的函數時,我們就說這是回調函數。
回調函數就是允許用戶把需要調用的方法的指針作爲參數傳遞給一個函數,以便該函數在處理相似事件的時候可以靈活的使用不同的方法。(摘自百科)

利用快速排序一個整型數組,一個浮點型數組,一個字符串數組。*/
//—、快速排序實現整型數組排序:
#include<stdio.h>
#include<stdlib.h>
int int_cmp(const void *elem1, const void *elem2)//int_cmp就是回調函數
{
                 return *(int *)elem1-*(int *)elem2;//只要求返回一個正整數或者負數或者零,所以直接可以用指針進行運算。必須先將void *輕質轉換才能運算
}
int main()
{
                 int arr[] = {1,3,5,7,9,2,4,6,8,0};
                 int i=0;
                 int sz=sizeof (arr)/sizeof(arr[0]);
                qsort(arr,sz, sizeof(int ),&int_cmp);//int_cmp前面加不加&都可以,因爲函數名就是地址,加上&增強程序的可讀性。
                 for(i=0;i<sz;i++)
                                printf( "%d ",arr[i]);
                system( "pause");
                 return 0;
}
//二、實現一個浮點型數組
#include<stdio.h>
#include<stdlib.h>
int float_cmp(const void *elem1, const void *elem2)
{
                 if((*(float *)elem1>*(float *)elem2))
                                 return 1;
                 else if ((*(float *)elem1==*( float *)elem2))
                                 return 0;
                 else
                                 return -1;
}
int main()
{
                 float arr[] = {0.2f, 1.5f, 9.0f, 8.8f, 0.0f};
                 int sz = sizeof (arr)/sizeof(arr[0]);
                 int i = 0;
                qsort(arr, sz, sizeof(float ), &float_cmp);
                 for(i=0; i<sz; i++)
                {
                                printf( "%f\n", arr[i]);
                }
                system( "pause");
                 return 0;
}
//三、實現一個字符串數組
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int str_cmp(const void *elem1, const void *elem2)
{

                 return strcmp(*(char **)elem1, *(char **)elem2);

}
int main()
{
                 char *arr[]={"abcdefgh" ,"abdcefg", "bbbbb"};
    int i=0;
                 int sz = sizeof (arr)/sizeof(arr[0]);
                qsort(arr,sz, sizeof(char *),str_cmp);//str_cmp的地址傳給qsort
                 for(i=0;i<sz;i++)
                {
                                printf( "%s ",arr[i]);
                }
                system( "pause");
                 return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章