C語言使用stdlib.h庫函式的二分查詢和快速排序程式
阿新 • • 發佈:2019-02-15
快速排序:
#include <stdlib.h> #include <stdio.h> #include <string.h> #define LENGTH(x) sizeof(x)/sizeof(x[0]) /**輸出陣列元素 *\param arr:指向陣列的指標 *\param len:陣列元素的個數 */ void print(char (*arr)[10],int len) { int i; for (i=0;i<len;i++) { printf("%s ",arr[i]); } printf("\n"); } int main() { char arr[][10]={"bac","bca","abc","acb","cba","cab"}; /* 定義二維字元陣列*/ char *key="bca";/* 要查詢的字串*/ char *ptr=NULL; /* 字元指標*/ // 輸出未排序時字元陣列的內容 printf("before qsort :"); print(arr,LENGTH(arr)); /* 使用qsort對字元陣列排序*/ qsort((void *)arr,LENGTH(arr),sizeof(arr[0]),(int (*)(const void *,const void *))strcmp); /* 輸出排序後字元陣列的內容*/ printf("after qsort :"); print(arr,LENGTH(arr)); /* 採用二分查詢查詢指定字元*/ ptr=(char *)bsearch(key,arr,LENGTH(arr),sizeof(arr[0]),(int (*)(const void *,const void *))strcmp); if(ptr) { /* 找到*/ printf("%s is in the array\n",key); } else/* 沒找到*/ { printf("%s isn't in the array\n",key); } return 0; }
二分查詢:
#include<stdlib.h> #include<stdio.h> #define ArrayLen(arr) (sizeof(arr) / sizeof(arr[0])) int numarray[] = {123, 145, 512, 627, 800, 933}; int numeric (const int *p1, const int *p2) { return(*p1 - *p2); } int* lookup(int key) {//返回值是指向key的地址 int *itemptr; // The cast of (int(*)(const void *,const void*)) is needed to avoid a type mismatch error at // compile time itemptr = (int *)bsearch(&key, numarray, ArrayLen(numarray), \ sizeof(int), (int(*)(const void *,const void *))numeric); return (itemptr); } int main(void) { int *p = lookup(512); if(NULL != p) printf("找到的key是%d,", *p); printf("key的下標是%d\n", (p - numarray)); return 0; }