判断一个极大的数组是否是有序数组(大数据)

导读:本篇文章讲解 判断一个极大的数组是否是有序数组(大数据),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

有序数组

判断一个极大的数组是否是有序数组

要求:时间复杂度为O(log n)

简述算法过程:
采用二分查找,设置一个数值,用二分查找查这个数,如果可以查到证明有序,左边数大于右边数为降序,右边数大于左边数为升序。

class Env
{
public:
    int data[40000];
    int pointer_max = 0;
    int pointer = 0;
    Env()
    {
        // test_3.csv test_4.csv test_5.csv   为第二题的测试用例
        ifstream file("test_data/test_1.csv", ios::in);     
        if (!file.is_open())
            cout << " 文件打开失败!" << endl;

        string temp;
        while (getline(file, temp))
        {
            data[pointer_max] = atoi(temp.c_str());
            pointer_max++;
        }
        file.close();
    }
};

// 所有的代码都需要写在 Algo 类内,自行定义其他需要的变量或函数
class Algo
{
public:
    Algo()
    {
        cout << "algo ok" << endl;
    }

int osearch(int n[],int object,int m)
{
    int left=0;
    int right=m;
    while(left<=right)
    {
        int mid=(right+left)/2;
        if(n[left]<n[mid]&&n[mid]<n[right])
        {
            if(n[mid]==object)
            {cout<<object<<"升序"<<endl;
            break;}
            else if (n[mid]<object)
            left=mid+1;
            else if (n[mid]>object)
            right=mid-1;
        }
        else{
            cout<<object<<"无序"<<endl;
            break;
        }
    }
return -1;
}
int tsearch(int n[],int object,int m)
{
    int left=0;
    int right=m;
    while(left<=right)
    {
        int mid=(right+left)/2;
        if(n[left]>n[mid]&&n[mid]>n[right])
        {
            if(n[mid]==object)
            {cout<<object<<"降序"<<endl;
            break;}
            else if (n[mid]<object)
            right=mid-1;
            
            else if (n[mid]>object)
            left=mid+1;
        }
        else{
            cout<<object<<"无序"<<endl;
            break;
        }
    }
return -1;
}
    int run(Env env)
    {
        // 在此写入你的代码
        // env.data[40000] 为已获取到的数组
        int k=150;
        int object = env.data[k];
        int left = 0;
        int right = 39999;
        int m=right;
        if(env.data[left]<env.data[right])
        osearch(env.data,object,m);
        if(env.data[left]>env.data[right])
        tsearch(env.data,object,m);

        return 0;
    }
};

结果:
在这里插入图片描述在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/115430.html

(0)
Java光头强的头像Java光头强

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!