二分法查找(数组元素无序)

问题描述:

数组,含有一堆无序数据,首先将数据按顺序排列,再用二分法实现某个元素的查找,若找到,返回该元素在数组中的下表,否则,返回不存在提示信息。

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

int *bubble_sort(int a[],int n)//冒泡排序(将数据升序排列)
{
	int i;
	int j;
	int tmp;

	for(j=0;j<n-1;++j)//n个元素需要排序n-1趟
	{
		for(i=0;i<n-j-1;++i)//第j趟需要比较n-j次,第一趟(j=0)需要比较n-1次,n-j-1
		{
			if(a[i] > a[i+1])
			{
				tmp = a[i];
				a[i] = a[i+1];
				a[i+1] = tmp;
			}
		}
	}
	return a;
}
int binary_search(int b[],int n,int num)//二分法查找
{
	int left = 0;
	int right = n-1;
	int mid;

	while(left <= right) //若left <= right说明比较还未完成
	{
		mid = (left + right)/2;

		if(num < b[mid])//所寻找元素在mid的左边
		{
			right = mid -1;
		}
		else if(num > b[mid])//所寻找元素在mid的右边
		{
			left = mid +1;
		}
		else
		{
			return mid;
		}
	}
	return -1;//left > right时说明比较完成后,仍未找到该元素
}
int main()
{
	system("mode con cols=100 lines=100");
	system("color 0A");

	int b[] = {34,45,23,13,57,85,37,10};//数组元素未排序
	int n = sizeof(b)/sizeof(b[0]);
	int i;    //循环因子
	int num;  //要寻找的元素
	int ret;  //接收二分法查找函数的返回值

	bubble_sort(b,n); //二分法查找的前提,元素已经是有序的(将数组元素升序排列)
	for(i=0;i<n;i++)
	{
		printf("%d\n",b[i]);
	}

	printf("please input the num you want to find:\n");
	scanf("%d",&num);

	ret = binary_search(b,n,num);
	if(ret == -1)
	{
		printf("it is not exist!\n");
	}
	else
	{
		printf("it's subscript is %d\n",ret);
	}

	system("pause");
	return 0;
}

时间: 2024-10-15 01:04:48

二分法查找(数组元素无序)的相关文章

折半查找数组元素的下标(java)

1.用折半查找数组元素的下标 2.但前提是数组已经排序好的3.例:public static void main(String ars []){        int [] number=new int []{2,6,9,45,65,88};}publci staic int getIndex(int [] arr,int key){    int min=0,max=arr.length,mid;    while(min<=max){            mid=(min+max)>&g

用最小的内存和二分法查找数组中是否存在这个数

package Test; public class Test { //用最小的内存查找数组中是否存在这个数 public static void main(String[] args) { int [] arr = {12,2,3,4,5,6,7,8,90,76,43}; byte[] byt = new byte[100]; for (int i = 0; i < arr.length; i++) { byt[arr[i]] = 1; } int n = 13; if(byt[n] == 1

二分法查找数组中元素

要使用二分法需要注意:  数组中的元素必须已经按升序排列好 二分法主要思想是将一个数组一分为二,每次查询都能将查询范围在上一次的基础上缩小一半.所以效率非常高. 下面是Java代码实现: 1 public class DichotomySearchDemo 2 { 3 4 public static void main(String[] args)throws Exception 5 { 6 int[] array = new int[]{1,3,4,6,7,9,10,10,12,18,21,2

php查找数组元素,提速

1.in_array(),判断数组中元素是否存在 bool in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] ) 第一个参数:$needle,待搜索的字符串,是区分大小写的 第二个参数:用阿里比较的数组 第三个参数默认是false:true会判断数据类型 2. 当数据量较大时,10万左右in_array()效率就低了,大概2秒 3.提高查找元素效率的方法 先使用array_flip,进行键值互换,再用isse

1117: 查找数组元素

题目描述 编写程序,输入n(1<=n<=10),输入n个整数构成一个数组,输入整数x,在这个数组中查找x是否存在,如果存在,删除x,后面元素依次向前添补空位,并输出删除元 素后的数组.如果不存在,输出"Not Found". 定义一个查找函数find(),在数组a中查找x,若找不到函数返回-1,若找到返回x的下标,函数原型如下: int find(int a[], int n, int x); 然后在main()中,先调用函数find(),若查找失败输出"Not

zzuli oj 1117 查找数组元素

题意描述:编写程序,输入n(1<=n<=10),输入n个整数构成一个数组,输入整数x,在这个数组中查找x是否存在,如果存在,删除x,后面元素依次向前添补空位,并输出删除元素后的数组.如果不存在,输出"Not Found".输入第一行是一个正整数n(1<=n<=10):第二行是n个整数,构成一个数组:第三行是一个整数x,表示待查找元素.输出删除元素后的数组,每个元素占4列,右对齐.如果不存在,输出"Not Found".如果数组中有多个x,只删

(二十三)查找数组元素

class Demo5 { public static void main(String[] args) { int[] a = new int[]{133,24,151,253,654,37,24}; int key = 24; int index = find(a,key); System.out.println("index=" + index); } //查找:一个数再数组中第一次粗线的下标,不存在输出-1: //结果:下标或-1 //参数:数组,查找的数 public sta

c语言二分法查找数组中一个数字的下标位置

int binary_search(int arr[], int k, int left, int right) { //int right = sizeof(arr) / sizeof(arr[0]) - 1;放在这里错误,arr是指针,长度为4个字节,right=0 while (left <= right) { int mid = left + (right - left) / 2;//每次都要改变,所以要循环 if (arr[mid] > k) { right = mid - 1; }

Java实现二分法查找数组

public class binarySearchTest { public static void main(String[] args) { int[] a = {1,5,9,36,49,89,102}; int c = 49; int pos = binarySearch(a,c); System.out.println(pos); } private static int binarySearch(int[] a, int c) { if(a.length == 0) return -1