C语言进阶——基于数组的查找
2018-03-15 23:41
239 查看
二分查找——迭代方式
1、前提:数组元素有序
二分查找——递归方式
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; }
相关文章推荐
- C语言 · 数组查找及替换
- C语言实现数组二分查找与顺序查找
- 【二分查找】用C语言实现一个有序数组的二分查找
- c语言核心整理之深入数组,熟练常用的基于数组的排序和搜索算法
- 算法3.2 二分查找(基于有序数组)(algs4)
- 【我解C语言面试题系列】012 查找整数数组中第二大的数
- C语言 有关数组查找
- C语言进阶-第6讲:递归法问题求解(递归求数组的最大值)
- 实现一个基于c语言的sin查找表,查找范围为[0 - 2*pi]
- 【基本数据结构】C语言基于数组的栈操作
- 【我解C语言面试题系列】012 查找整数数组中第二大的数
- C语言数组折中查找
- C语言及程序设计进阶例程-24 查找问题及其求解
- 基于数组二分查找算法的实现
- C语言面试题 4 (查找整数数组中第二大的数)
- c语言心得-----数组中对元素的操作排序,查找,插入,和删除
- C语言进阶-第11~13讲:结构体(含数组和函数)