数据结构(C)---二分法随记
来源:互联网 发布:汉诺塔递归算法思想 编辑:程序博客网 时间:2024/04/29 13:24
#include <stdio.h>
#include <stdlib.h>
void sort(int sore_num[] , int m ); //排序函数
int search(int search_num[] , int search_n,int x); //定义二分发函数
int main()
{
int n , i; // 定义数组个数和遍历数组的临时变量i
int x;
printf("请输入数据个数:");
scanf("%d" , &n);
int num[n];
for(i=0;i<n;i++)
{
printf("请输入第%d个数据:",i+1);
scanf("%d" , &num[i]);
} //输入部分,不解释
sort(num,n);
printf("排序后新数组为:");
while(i--)
{
printf(" %d",num[n-i-1]);
} //进行数组排序,并且输出
printf("\n请输入要查找的数:");
scanf("%d" ,&x);
if (search(num, n ,x)==-1 )
{
printf("所需要查找的数据在数组中未找到");
}else{
printf("所输入的数据在新数组中的位置是:%d", search(num, n ,x));
} // 调用二分法查找函数,返回-1 则为找到 ,反之找到
return 0;
}
void sort(int sore_num[] , int m )
{
int i , j;
for(i=0;i<m;i++)
{
for(j=i+1;j<=m;j++)
{
if(sore_num[i]>sore_num[j])
{
sore_num[i]+=sore_num[j];
sore_num[j]=sore_num[i]-sore_num[j];
sore_num[i]-=sore_num[j];
}
}
}
} //选择排序
int search(int search_num[] , int search_n,int x)
{
int left , right , mid;
int i=-1;
left=0;
right=search_n-1; //定义left right mid 用来标记数组下标
while(search_num[left]<=search_num[right]) //条件限定若左值大于右值循环结束(与排序后数组排列方式有关)
{
mid=(left+right)/2;
if(search_num[mid]==x)
{
i=mid;
left=right+1; //将i置为找到数下标 ,并使条件为false
}else if(search_num[mid]>x){
right=mid-1;
}else{
left=mid+1;
}
}
return i;
}
思路:1.数组输入后 排序为有序数组,因为二分法只能查找有序数组
2.定义左下标left=0 , 右下标right=数组个数-1, mid是left 和right的中间值
3.当left>right时候为未找到,
4.若需要查找的元素等于数组下标为mid的数的时候,将mid的值给i, 并使left=right+1使其条件不成立
5.若需要查找的元素大于数组下标为mid的数的时候,将right置为mid 并-1,使mid为数组的右值的下标,返回继续进行判断。
6. 若需要查找的元素小于数级下标为mid的数的时候,将left置为mid并+1,使mid 为数组的左值的下标,返回继续进行判断。
第一次写博客,写的不好请见谅
- 数据结构(C)---二分法随记
- 数据结构(C)---汉诺塔随记
- 二分法(c语言)
- 二分法查找(C)
- 数据结构二分法
- C语言随记(一)
- caffe随记(二) --- 数据结构简介
- 用c语言实现二分法查找表格【数据结构】
- 数据结构与算法 二分法查找【Python与C】的实现
- C语言随记(一)—函数
- C语言函数随记:fflush()函数
- 数据结构之二分法
- 【数据结构】关于二分法
- 数据结构 之二分法查找
- [数据结构]二分法查找
- 图解数据结构二分法查找
- 图解数据结构(4)——二分法查找法
- 图解数据结构(4)——二分法查找法
- 在Tomcat容器中使用struts2-json-plugin的问题
- 给超链接加onclick属性
- poj1787-多重背包(基于完全背包)
- 部署Java Web项目报错(一)
- centos 安装ia32-libs
- 数据结构(C)---二分法随记
- 因子和阶乘
- ps画高光技巧
- 快速排序
- Hibernate学习笔记
- Linux下配置QT for Android 环境
- The type javax.servlet.http.HttpServletRequest cannot be resolved.
- Android与linux的区别与联系
- C++引用&和指针在作为形参时的区别