qsort庫函式和函式指標

2021-08-19 18:11:43 字數 2324 閱讀 5417

這個函式對陣列排序時需要知道:

.陣列起始的位址

陣列元素的個數

每個元素的大小

元素的排序規則

**中每個單詞的含義:

base:待排序陣列位址的起始位址

nelem:待排序陣列的元素個數

width:每個元素的大小

pfcompare:比較函式的位址(該比較函式需自己編寫規則)

ps:pf函式形式:int 函式名(const void * elem1,const void* elem2)

qsort函式在執行期間,會通過pfcompare指標呼叫「比較函式」,

呼叫時將要比較的兩個元素的位址傳給「比較函式」,然後根據

「比較函式」返回值判斷兩個元素哪個更應該排在前面。

如果*elem1應該排在*elem2前面,則函式返回值是負整數

如果*elem1和*elem2negev排在前面都行,那麼返回值0

如果*elem1應該排在*elem2垢面,則函式返回值是正整數

例項:

下面的程式,功能是呼叫qsort函式,將乙個unsigned int陣列按照個位數從小到大進行排序。比如8,23,15三個數,

按個位數從小到大排序,應該是23,15,8

#include

#include

int mycompare(const

void* elem1,const

void* elem2)

#define num 5

int main()

; qsort(a,num,sizeof(unsigend int),mycompare);

for(int i=0;iprintf("%d",a[i]);

return

0;}

輸出結果 10 11 123 4 8

如果自己寫乙個通用的快排函式:

#include 

#include

#include

typedef

struct s

stu;

int cmp(const

void*n1, const

void*n2)

int struct_cmp(const

void *elem1, const

void *elem2)

int str_cmp(const

void *elem1, const

void *elem2)

void swap(char *buf1, char* buf2, int width)

}void bubble_sort(void *base, int len, int width, int(*cmp)(const

void* n1, const

void*n2))}}

}int main()

; int len = sizeof(arr) / sizeof(arr[0]);

bubble_sort(arr, len, sizeof(arr[0]), cmp);

int i = 0;

for (i = 0; i printf("%d ", arr[i]);

}printf("\n");

char arr1 = ;

int len1 = sizeof(arr1) / sizeof(arr1[0]);

bubble_sort(arr1, len1, sizeof(arr1[0]), cmp);

for (i = 0; i < len1; i++)

printf("\n");

stu arr2 = , , , };

int len2 = sizeof(arr2) / sizeof(arr2[0]);

bubble_sort(arr2, len2, sizeof(stu), struct_cmp);

for (i = 0; i < len2; i++)

printf("\n");

char *arr3 = ;

int len3 = sizeof(arr3) / sizeof(arr3[0]);

bubble_sort(arr3, len3, sizeof(char *), str_cmp);

for (i = 0; i < len3; i++)

printf("\n");

system("pause");

return

0;}

c 函式指標和qsort庫函式

在c語言或者c 語言中可以把乙個函式的入口位址賦值給乙個指標,這就叫函式指標,然後可通過函式指標來呼叫函式。c語言中 定義形式 型別名 指標變數名 引數型別1,引數型別2 eg int pf int,char 表示pf是乙個函式指標,它所指向的函式,返回值是int,有兩個引數,分別為int和char...

排序庫函式sort 和qsort

sort是stl中提供的演算法,標頭檔案為 include以及using namespace std 函式原型如下 template void sort randomaccessiterator first,randomaccessiterator last template void sort r...

標準庫函式qsort排序

qsort函式包含在的標頭檔案裡。qsort函式宣告如下 void qsort void base,size t nmemb,size t size,int compar const void const void 引數說明如下 base 要排序的陣列 nmemb 陣列中的元素數目 size 每個陣...