精华内容
下载资源
问答
  • 问题:有一个升序排列无重复数字的数据,以及一个数字,利用二分法查找数字在数组中的位置,找到则返回其位置号,没找到返回-1.解答:通过两种方式实现:第一种方式为递归实现,需要传递数组的头和尾的位置。[java]...

    问题:有一个升序排列无重复数字的数据,以及一个数字,利用二分法查找数字在数组中的位置,找到则返回其位置号,没找到返回-1.

    解答:

    通过两种方式实现:第一种方式为递归实现,需要传递数组的头和尾的位置。

    [java] view plain copy
    1. public class MidFind {  
    2.       
    3.     /** 
    4.      *  
    5.      * @param arr 
    6.      * @param key 
    7.      * @param startNum 数组位置号,为数组下标+1 
    8.      * @param endNum 数组位置号,为数组下标+1 
    9.      * @return 
    10.      */  
    11.     public static int getLocation(int[] arr,int key,int startNum,int endNum) {  
    12.         if (arr==nullreturn -1;  
    13.         int middleNum=(startNum+endNum)/2;  
    14.         System.out.println("中间值:"+middleNum);  
    15.         if (startNum<endNum) {  
    16.             if (key==arr[middleNum]) {  
    17.                 return middleNum+1;  
    18.             } else if (key<arr[middleNum]) {  
    19.                 return getLocation(arr,key,startNum,middleNum);  
    20.             } else {  
    21.                 return getLocation(arr,key,middleNum,endNum);  
    22.             }  
    23.         } else if (startNum==endNum) {  
    24.             return startNum;  
    25.         } else {  
    26.             return -1;  
    27.         }  
    28.     }  
    29.   
    30.     /** 
    31.      * @param args 
    32.      */  
    33.     public static void main(String[] args) {  
    34.         // TODO Auto-generated method stub  
    35.         int[] arr={1,3,4,5,6,7,11,46,255,743,888};  
    36.         int temp=getLocation(arr,11,1,11);  
    37.         System.out.println(temp);  
    38.     }  
    39.   
    40. }  

    第二种实现方式为非递归实现,则利用循环:
    [java] view plain copy
    1. public class MidFind2 {  
    2.   
    3.     public static int getLocation(int[] arr,int key) {  
    4.         if (arr==nullreturn -1;  
    5.         int middleNum=arr.length/2;  
    6.         if (key==arr[middleNum]) {  
    7.             return middleNum+1;  
    8.         }  
    9.         int startNum=0//数组下标  
    10.         int endNum=arr.length-1//数组下标  
    11.         while (startNum<=endNum) {  
    12.             middleNum=(startNum+endNum)/2;  
    13.             if (key<arr[middleNum]) {  
    14.                 endNum=middleNum;  
    15.             } else if (key>arr[middleNum]) {  
    16.                 startNum=middleNum;  
    17.             } else {  
    18.                 return middleNum+1;  
    19.             }  
    20.         }  
    21.         return -1;  
    22.     }  
    23.     /** 
    24.      * @param args 
    25.      */  
    26.     public static void main(String[] args) {  
    27.         // TODO Auto-generated method stub  
    28.         int[] arr={1,3,4,5,6,7,11,46,255,743,888};  
    29.         int temp=getLocation(arr,5);  
    30.         System.out.println(temp);  
    31.     }  
    32.   
    33. }  
    展开全文
  • #include #include using namespace std; int find(int arr[], unsigned int n, int key) { assert(arr != NULL); unsigned int i = 0; unsigned int grap = 0; while (i) { if (arr[i]==key) ... r
    #include <iostream>
    #include <cassert>
    using namespace std;
    
    
    int find(int arr[], unsigned int n, int key)
    {
    	assert(arr != NULL);
    	unsigned int i = 0;
    	unsigned int grap = 0;
    	while (i<n)
    	{
    		if (arr[i]==key)
    		{
    			return i;
    		}
    		else
    		{
    			grap = abs(key - arr[i]);
    			i += grap;
    		}
    	}
    
    	return -1;
    
    }
    int main()
    {
    	int arr[6] = {2, 3, 2, 3, 4, 5};
    	cout << "坐标为:" << find(arr, 6, 4) << endl;
    }

    
    
    展开全文
  • 从键盘任意输入10个整数存入一个数组中,然后任意输入一个整数x,采用顺序查找法,在数组中查找该数,如果找到,则函数返回该数在数组中的下标位置,并在主函数中打印该值;如果没有找到,则返回-1,并在主函数中...
    
    从键盘任意输入10个整数存入一个数组中,然后任意输入一个整数x,采用顺序查找法,在数组中查找该数,如果找到,则函数返回该数在数组中的下标位置,并在主函数中打印该值;如果没有找到,则返回-1,并在主函数中打印“Not found!”。要求按如下函数原型编程实现查找功能。int Search(int a[], int n, int x);在主函数中调用函数Search顺序查找x,然后在主函数中打印查找结果。要求必须按照题目要求和用函数编程,否则不给分。**要求输入10个整数的提示信息格式为:"Input 10 numbers:\n"(每输入一个数,键一次回车);**要求输入整数x的提示信息格式为:"Input x:\n"**要求输出格式为:找到时的打印格式为"Subscript of x is %d\n"没找到时的打印格式为"Not found!\n"
    
    
    
    #include<stdio.h>
    int Search(int a[], int n, int x);
    void main()
    {
        int a[10],i,m,x,n;
        printf("Input 10 numbers:\n");
        for(i=0;i<10;i++)
        {
            scanf("%d",&a[i]);
        }
        printf("Input x:\n");
        scanf("%d",&x);
        m=Search(a,n,x);
        if(m==-1)
            printf("Not found!");
        else
            printf("Subscript of x is %d\n",m);
    }
    int Search(int a[], int n, int x)
    {
        int i;
        for(i=0;i<10;i++)
        {
            if(a[i]==x)
                return i;
        }
        return -1;
    }
    


    从键盘任意输入10个整数存入一个数组中,然后任意输入一个整数x,采用顺序查找法,在数组中查找该数,如果找到,则函数返回该数在数组中的下标位置,并在主函数中打印该值;如果没有找到,则返回-1,并在主函数中打印“Not found!”。要求按如下函数原型编程实现查找功能。int Search(int a[], int n, int x);在主函数中调用函数Search顺序查找x,然后在主函数中打印查找结果。要求必须按照题目要求和用函数编程,否则不给分。**要求输入10个整数的提示信息格式为:"Input 10 numbers:\n"(每输入一个数,键一次回车);**要求输入整数x的提示信息格式为:"Input x:\n"**要求输出格式为:找到时的打印格式为"Subscript of x is %d\n"没找到时的打印格式为"Not found!\n"
    展开全文
  • 要求查找个数在数组中的位置。 #include <iostream> using namespace std; void Grial(int a[], int n, int val) { //我的思路是从第一个数開始,假设这个数是2, //而我要找的数是5。那...
    //有一个int型数组,每两个相邻的数之间的差值不是1就是 
    //- 1.如今给定一个数。要求查找这个数在数组中的位置。
    #include <iostream>
    using namespace std;
    void Grial(int a[], int n, int val)
    {
        //我的思路是从第一个数開始,假设这个数是2,
        //而我要找的数是5。那么最好我也必须向后面
        //跳5-2=3个位置,由于每一个数字仅仅相差1或者-1.
        int i = 0;
        int *b = new int[n];//假设所有是val,则须要n空间。
        int k = 0;
        for (; i < n;)
        {
            if (a[i] == val)
            {
                b[k++] = i;
                i++;
            }
            else
            {
                int len = a[i]>val ?

    a[i] - val : val - a[i]; i += len; } } cout << val << "出现的下标位置有:"; for (i=0; i < k; i++) { cout << b[i] << " "; } cout << endl; } int main() { int a[] = {2,3,4,5,6,7,6,5,4,3,2,1,2,3,4,5}; Grial(a, sizeof(a) / sizeof(int),5); return 0; }

    转载于:https://www.cnblogs.com/wzjhoutai/p/7217724.html

    展开全文
  • #include int main() { int b,c,j; int a[10]={0,20,30,2,8,100,77,4,9,88}; printf("请输入0,20,30,2,8,100,77,4,9,88中的一个数:\n"); scanf("%d",&b); for(j=0;j;j++) { if(a[j]==
  • 我们必须对数字数组进行升序排序,并找出给定数字数组中的位置。 算法说明 将值(第二个参数)插入到数组(第一个参数)中,并返回其排序后的数组中的最低索引。返回的值应该是一个数字。 例如 getIndexToIns...
  • 原题 : 给定一个排好序数组,同时给定一个查找的数,找出这个数在数组中出现起始位置和结束位置。算法时间复杂度是log(N)。如果没有找到就返回[-1,-1] 比如给定[5,7,7,8,8,10],需要查找的值为8,返回:[3...
  • 此题和下一道题的一个区别是:数组中可以有重复数字。 二分查找:开始时,先找出有序集合中间那个元素。如果此元素比要查找的元素大,就接着较小的一个半区进行查找;反之,如果此元素比要找元素小,就较...
  • 【实训内容2】输入10个数,保存在一个数组中,再任意输入一个数,在数组中查找这个数,给出是否找到的信息,如果找到了,要求输出该数在数组中所处的位置;如果找不到,输出“没有找到”。 #include <stdio.h>...
  • 输出在数组中一个大于等于查找的位置,如果数组中不存在这样的,则输出数组长度加一。 输入 5,4,[1,2,4,4,5] 输出 3(从1开始的哦。不是index) 思路: 1.代码如下 BinSearch2 .java: package ...
  • //目标:找一个数据(31)数组中的位置 $v1 = 15; $arr2 = array( 3, 4, 5, 15, 19, 21, 25, 30, 30, 30, 33, 38, 44, 51, 52, 55, 60, 77, 80, 82, 83); //$arr: 要从中找数据的数组 //$v: 要...
  • 在一个有序的数组中,快速查找某值有序数组中的位置,有人说这很容易啊,直接一个for循环遍历看看数组中哪个值与它相等,输出索引就ok了。这是个很直接的方法,但又没有想过但数组的长度很长时,你遍历一遍是不是...
  • 随机生成一个short型一维数组,从控制台输入一个数值,遍历数组查找,如果找到了,打印出该数在数组中的位置,如果没有查到,请将该数值插入并形成新的数组(要求降序) 代码如下: package java_object.test1_1; ...
  • 定义一个方法,查找指定数字在数组中出现的位置(若出现多次,多次打印) 如: 数组[1232]要查找是2 则方法内部会打印索引值 1 ,3 数组[1232] 要查找是5 则方法每部会打印 “数组中没有这个数字” package it....
  • 如果找到了要求输出该数在数组中所处的位置;如果找不到 输出“没有找到!” */ public class practice01 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println...
  • 不过现在需要在数组中找某个出现的次数,那么我们就需要找到这数字在数组中次出现的位置,以及最后次出现的位置,将这两下标减再加上1就是我们需要的结果。 找第次出现的位置时,我们利用二分法找到...
  • 有序数组中查找一个数字,可以使用二分查找 该题给定的是有序数组移动后的数组,所以不能直接利用二分查找 给定的数组为 4, 5, 6, 7, 8, 9, 1, 2, 3 思路是先找到断点,也就是该数组中数字1所在的位置 由于数组是...
  • 关于思路: 由于这个二维数组行和列是以递增形式...当我们拿它跟所要找元素对比之后,我们可以缩小要找元素范围,这样步步缩小范围就能确定要查找的个数在不在这个二维数组中了。 关于代码:   关于结
  • 二分查找:首先在数组中找到中间位置的数组下标mid=(start+end)/2,将所要找数x与mid进行比较: 若x>mid,则要找的数在后半部分,所以令start=mid+1 若x<mid,则要找的数在前半部分,所以令end=mid-1 重复...
  • 题目一:输一个递增排序数组和一个数字 s,在数组中查找个数使得它们 和正好是 s。如果有多对数字和等于 s,输出任意一对即可。例如:输入数组 {1,2,4,7,11,15}和数字为 15.输出 4 和 11. 思路:不考虑...
  • 输出在数组中一个大于等于查找的位置,如果数组中不存在这样的,则输出数组长度加一。 题目分析: 方法一 下面是Java代码 import java.util.*; public class Solution { /** * 二分查找 * @param n int整型...
  • 题目:在一个有序数组中查找>=某个的最左侧的位置 package com.nsu.search; /** * @program: datastruct * @ClassName NearLeftSearch * @description: 在一个有序数组中,找>=某个最左侧的位置 * @...
  • 34. 排序数组中查找元素一个和最后一个位置 剑指Offer 053 排序的数组中查找数字
  • #include "stdafx.h" #include "stdlib.h" void main() { int a[10],i,j,k,sum=0; printf("Please input ten numbers: "); for(i=0;i;i++) scanf("%d",&a[i]); for(i=0;i;i++)
  • 找出给定目标值在数组中的开始位置和结束位置。 你的算法时间复杂度必须是 O(log n) 级别。 如果数组中不存在目标值,返回 [-1, -1]。 例子 思路 要求O(logn),所以只能时二分查找法,先找左边界,再找有右边界。...
  • 查找x在数组中的位置

    2020-03-31 11:35:34
    =200),然后输入n个数值各个不相同的,再输入一个值x,输出这个值在数组中的下标。 输入: 4 1 2 3 4 3 输出:2 #include <cstdio> const int maxn=210; int a[maxn]; int main(){ int n,x; while(scanf...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,009
精华内容 1,203
关键字:

查找一个数在数组中的位置