二分法练习题目

二分查找法

1.      二分查找的数组是有序的

2.      二分查找能够有效的减少有序数组的查询次数

3.      题目

利用二分查找法,查找某个数,如果存在则输出这个数,如果不存在,输出比它大的最小的数,输出比它小的最大的数,如果该数不在这个数组的范围内,就会报错

#include<stdio.h>
#include<stdlib.h>
void init(int array[],int num);
int binaryFind(int array[],int num,int findNum);
//06
void main()
{
	int ret = 1;
	int a[10] ={0};
	init(a,sizeof(a)/sizeof(*a));
	int findNum = 0;
	printf("输入你想要查找的数:");
	scanf("%d",&findNum);
    ret = binaryFind(a,sizeof(a)/sizeof(*a),findNum);
	if (ret == -1)
	{
		printf(" error: %d  can't find the number %d",ret,findNum);
	}
	else
	{
		printf("the label is %d",ret+1);
	}
	system("pause");
}
//数组输入和排序
void init(int array[],int num)
{
   int temp = 0;
   //数组的录入
   for (int i = 0;i< num;i++)
   {
	   printf("请输入%d个数",i+1);
	   scanf("%d",&array[i]);
   }
   //冒泡排序
   for(int i = 0;i< num;i++)
   {
      for(int j = 0;j<num-i-1;j++)
	  {
		  if(array[j]>array[j+1])
		  {
			  temp = array[j];
			  array[j] = array[j+1];
			  array[j+1] = temp;

		  }
	  }
   }
}

//二分查找
int binaryFind(int array[],int num,int findNum)
{
	int ret = -2;
	if (array == NULL)
	{
		return ret = -1;
	}
	//二分查找主要算法
	int begin = 0;
	int end   = num -1;
	int nowLable = 0;

	if (findNum < array[0] || findNum > array[num -1])
	{
		return ret = -1;
	}
	while(begin <= end)
	{
		nowLable = (begin + end)/2;
		if (array[nowLable]== findNum)
		{
			return nowLable;
		}
		if (array[nowLable]>findNum)
		{
			end = nowLable - 1;
		}else
		{
	        begin = nowLable + 1;
		}
	}

	if (array[nowLable] > findNum)
	{
		printf("the biger number is %d\n",array[nowLable]);
		printf("the lower number is %d\n",array[nowLable -1]);
	}
	else
	{
		printf("the biger number is %d\n",array[nowLable+1]);
		printf("the lower number is %d\n",array[nowLable]);
	}


	return ret;
}

### PTA练习题分类汇总 PTA(Programming Teaching Assistant)是一个用于编程教学和评测的在线平台,广泛应用于高校的教学实践中。其题目通常按照难度、知识点以及应用场景进行分类。以下是基于常见实践总结的PTA练习题分类: #### 1. **基础知识** 这一类别主要涉及程序设计的基础概念,适合初学者掌握基本语法和逻辑思维。 - 数据类型与变量声明 - 输入输出操作 - 基本运算符的应用 示例:编写一个简单的程序计算两个整数之和[^3]。 #### 2. **控制结构** 控制结构是程序设计的核心部分之一,主要包括条件判断和循环语句。 - 条件分支:`if...else`, `switch...case` - 循环结构:`for`, `while`, `do...while` 示例:实现一个程序,通过用户输入的一个年份判断该年是否为闰年。 #### 3. **函数与模块化** 函数的设计与调用能够提高代码的可读性和重用性。 - 自定义函数 - 参数传递方式 - 返回值处理 示例:创建一个求解二次方程根的函数。 #### 4. **数组与字符串** 数组和字符串的操作是解决实际问题的重要工具。 - 一维/二维数组初始化与遍历 - 字符串的基本操作:拼接、截取、比较等 示例:统计一段文字中某个字符出现次数。 #### 5. **指针与引用** 对于C/C++语言而言,理解指针的概念至关重要。 - 动态内存分配 - 指针算术 - 引用作为参数传入 示例:利用动态内存分配构建链表节点。 #### 6. **文件操作** 文件I/O对于保存持久化数据非常必要。 - 文本文件读写 - 二进制文件处理 示例:将一组学生信息存入CSV格式文件。 #### 7. **面向对象编程(OOP)** 面向对象的思想贯穿现代软件开发始终。 - 类与对象定义 - 封装继承多态特性应用 示例:设计一个人类及其子类教师类来展示OOP特点。 #### 8. **算法与数据结构** 更高级别的挑战往往涉及到经典的数据结构和高效算法运用。 - 排序算法:冒泡排序、快速排序等 - 查找技术:线性查找、二分法查找等 - 树形结构:二叉树遍历、平衡树维护等 示例:采用堆排序方法对给定列表升序排列。 --- ```cpp // 示例代码片段:简单交换两数值功能演示 #include <iostream> using namespace std; void swap(int& a, int& b){ int temp = a; a = b; b = temp; } int main(){ int num1=5, num2=10; cout << "Before swapping: " << num1 << ", " << num2 << endl; swap(num1, num2); cout << "After swapping: " << num1 << ", " << num2 << endl; } ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值