您的位置:首页 > 编程语言 > C语言/C++

C语言进阶——基于数组的查找

2018-03-15 23:41 239 查看
二分查找——迭代方式

1、前提:数组元素有序

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

#define len 10
typedef enum{
EROOR,SUCCESS
}STATUS;
//迭代二分查找
int search(int *p,int low,int high,int find){
while(low <= high){//这里一定要写<=
int  mid = (low+high)/2;
if(p[mid] == find)
return mid;
if(p[mid] < find)
low = mid+1;
else
high = mid-1;
}
return -1;

}
//选择排序
STATUS selectSort(int *arr,int n){
int idx;
for(int i = 0;i<len-1;i++){
idx = i;
for(int j = i+1;j<len;j++){
if(arr[idx]>arr[j])
idx = j;
}

if(idx != i){
arr[i]^= arr[idx];
arr[idx]^= arr[i];
arr[i]^= arr[idx];
}
}

return SUCCESS;
}
int main(void){

srand(time(NULL));
int arr[len];
arr[0] = 0;
//初始化数组
for(int i = 1;i<len;i++){
arr[i] = rand()%100+1;
}
//排序
selectSort(arr,len);
//打印数组
for(int i = 0;i<len;i++){
printf("%5d",arr[i]);
}
printf("\n");
//查找
int pos = search(arr,0,len-1,0);
//输出查找结果
if(pos == -1){
printf("不存在");
}
else
printf("%d",pos);
return 0;
}


二分查找——递归方式

//递归二分查找
int binSearch (int *p,int low ,int high,int find){

if(low <= high){
int mid = (low+high)/2;
if(p[mid] == find)
return mid;
else if(p[mid] < find)
return binSearch(p,mid+1,high,find);
else
return binSearch(p,low,mid-1,find);
}
return -1;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息