码迷,mamicode.com
首页 > 其他好文 > 详细

二分法查找

时间:2017-11-18 19:59:47      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:nta   res   png   contains   实验   alt   数据   相同   指针   

本实验主要用二分法来查找两个数组中不同的元素

#include<iostream>

using namespace std;

int* GetAllNotIncluded(int A[], int a_length, int B[], int b_length);

int main()
{
    int arr1[6] = { 1,2,3,4,5,6, };
    int arr2[3] = { 8, 9, 1 };

    int *arr3;
    arr3 = GetAllNotIncluded(arr1, 6, arr2, 3);

    for (int i = 0; i<sizeof(arr2)/sizeof(int); i++)
        cout << arr3[i]<< ;    
    cin.get();   //暂停窗口,没有其他意义
    return 0;
}

int* GetAllNotIncluded(int A[],int a_length, int B[],int b_length) {  //二分法查找不同的数据    
    int k = 0;
    int *res = new int[];         //声明一个数据指针
    for (int i = 0; i < b_length; i++) {   
        int l = 0;                         
        int r = a_length - 1;
        bool contains = false;
        while (l <= r) {
            int mid = l + ((r - l) >> 1);
            if (A[mid] == B[i]) {
                contains = true;
                break;
            }
            if (A[mid] > B[i]) {
                r = mid - 1;
            }
            else {
                l = mid + 1;
            }
        }
        if (!contains) {         //存储不相同的数据    
            res[k] = B[i];
            k += 1;            
        }
    }
    return res;
}

本实验有两个不足:

第一没法知道返回的指针数组的大小,导致用了

技术分享图片

这样的表述

 

第二在子函数中不能用

sizeof(A)/sizeof(int)

来求数组的长度

例如:

int* GetAllNotIncluded(int A[], int B[]) {  //二分法查找不同的数据    
    int k = 0;
    int *res = new int[];         //声明一个数据指针
    for (int i = 0; i < sizeof(B)/sizeof(int); i++) {   
        int l = 0;                         
        int r = sizeof(A)/sizeof(int)- 1;
        bool contains = false;
        while (l <= r) {
            int mid = l + ((r - l) >> 1);
            if (A[mid] == B[i]) {
                contains = true;
                break;
            }
            if (A[mid] > B[i]) {
                r = mid - 1;
            }
            else {
                l = mid + 1;
            }
        }
        if (!contains) {         //存储不相同的数据    
            res[k] = B[i];
            k += 1;            
        }
    }
    return res;
}

这样写得出来的A的长度只有1.

 

欢迎大神赐教,O(∩_∩)O谢谢。

 

二分法查找

标签:nta   res   png   contains   实验   alt   数据   相同   指针   

原文地址:http://www.cnblogs.com/panlangen/p/7857591.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!