在一个数组中查找指定的数字

int main() {
	//声明一个整型数组
	//int num[5] = { 10,230,3412,43,324 };//赋值,长度为5
	int nums[] = { 13,321,4325,5346,123,41 };//长度为6
	//查找的元素
	int num;
	printf("请输入要查找的数:");
	scanf("%d", &num);
	//求数组的长度
	int length = sizeof(nums) / sizeof(nums[0]);//24
		//进行查找
		for (int i = 0; i < length; i = i++) {//查找次数确定,为数组长度
			//判断比较,通过数组名[下标]可以获取数组中的元素
			if (num == nums[i]) {
				printf("找到了,索引为%d", i);
				return 0;
			}
	}
		printf("对不起,数组中不存在该元素");
	return 0;
}

二分查找法

如果是在一个有序的数组查找指定的数字,比如升序,则这些数字的地址也都是升序,那么你要查找的数如果比最中间的数(mid)大(小),那么就在mid的右边(左边)找,如何再在下一次要找的右边(左边)的区间继续使用二分法

int main() {
	//在一个升序数组中查找指定的数字
	printf("输入0退出程序\n");
	while (1) {
	int nums[] = { 1,2,3,4,5,6,8,10,14,23,45,66,74 };
	//查找的元素
	int num;
	printf("请输入要查找的数:");
	scanf("%d", &num);
	if (num == 0) {
		return 0;
	}
	//求数组的长度
	int length = sizeof(nums) / sizeof(nums[0]); 
	//声明两个变量,表示要查找的区间,默认查找的区间为[0,length-1]
	int i=0;
	int j=length-1;
	int index = -1;//表示结果
		while (i <= j) {
			//第一次查找
			int mid = i + (j - i) / 2;//避免越界(避免超出int表示的范围:2的32次方-1)
			//使用中间位置的值与查找的值进行比较
			if (num == nums[mid]) {
				//找到了
				printf("%d的索引为%d\n", num, mid);
				index = mid;
				break;
			}
			else if (num > nums[mid]) {
				//在mid的右边找[mid+1,j]
				i = mid + 1;
			}
			else {
				//在mid的左边找[i,mid-1]
				j = mid - 1;
			}
		}
		if (index == -1) {
			printf("对不起,数组中不存在该元素\n");
		}
	}
	return 0;
}

用二分法可以大大提高效率

你可能感兴趣的:(算法,数据结构,java)