C語言查找算法之順序查找、二分查找(折半查找),最近考試要用到,網上也有很多例子,我覺得還是自己寫的看得懂一些。
- 順序查找
/*順序查找 順序查找是在一個已知無(或有序)序隊列中找出與給定關鍵字相同的數的具體位置。 原理是讓關鍵字與隊列中的數從最后一個開始(或第一個)逐個比較,直到找出與給定關鍵字相同的數為止
它的缺點是效率低下 */ #include<stdio.h> void main(){ int i ,num,arr[10]={3,6,9,10,65,23,76,45,2,11}; int size = sizeof(arr)/sizeof(int); printf("請輸入要查詢的值:"); scanf("%d",&num); for(i=0;i<size;i++){ if(num==arr[i]){ break; } } if(i!=size) printf("要查詢的值%d在第%d個位置",num,i+1); else printf("未找到值%d",num); getch(); } - 二分查找
/*二分查找 二分查找也稱折半查找(Binary Search),它是一種效率較高的查找方法。 但是,折半查找要求線性表必須采用順序存儲結構,而且表中元素按關鍵字有序排列。 */ #include<stdio.h> void main(){ int mid,low,high,num,arr[10]={3,6,9,10,23,65,76,87,88,213}; int size = sizeof(arr)/sizeof(int); printf("請輸入要查詢的值:"); scanf("%d",&num); low = 0; high = size;//初始low和high的值 while(low<=high){ mid = (low+high)/2;//取中值 if(arr[mid]==num) break;//找到,結束循環此時low<=high else if(arr[mid] < num) low = mid+1;//如果目標值比當前中間值大,說明目標值在中間值的后面low移動到mid+1 else high = mid - 1; } if(low <= high)//找到,輸出 printf("要查詢的值%d在第%d個位置",num,mid+1); else //未找到 printf("未找到值%d",num); getch(); }