1.從有序可重複數組中尋找一個元素首次出現的位置(由有序可知,可使用二分查找來提升搜索速度,不過須要注意可重複性的特色,所以在這個基礎上略微修改查找函數便可)數組
int find_num(int *data, int num, int low, int high){ int mid; mid = (low+high)/2; if(high>low){ if(*(data+mid)==num) return find_num(data, num, low, mid); else if(*(data+mid)>num) return find_num(data, num, low, mid-1); else return find_num(data, num, mid+1, high); } else{ if(*(data+high)==num) return low; else return -1; } } int main(int argc, char *argv[]){ int result, num=6; int testdata[]={1,1,1,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,5,5,5,5,5,5,5,5,6,6,6,6,6,6}; result = find_num(testdata, num, 0, sizeof(testdata)/sizeof(int)); result>=0?printf("find %d in testdata[%d]\n", num, result):printf("not found\n"); system("pause"); return 0; }