C++求有序数组旋转之后的最小数字

//问题是:有一万个员工在公司上班,公司为了统计上班人的年纪分布情况,
//请将这一万多的人的年纪进行排序,分析一个比较好的算法.

#include <iostream>
#include <vector>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#define _MAX_AGE_ 100
#define _MIN_AGE_ 0
#define _EXIT_ cout<<"存在年纪取值不对!";exit(-1)
using namespace std;

void Grial(vector<int> ar)
{
    int array[_MAX_AGE_];//声明一个空间大小为_MAX_AGE_的数组。
    memset(array,‘\0‘,sizeof(array));
    int n = ar.size();
    for(int i=0;i<n;i++)
    {
        if(ar[i]>=_MAX_AGE_ || ar[i]<=_MIN_AGE_)
            {_EXIT_;}
        else
        {
            array[ar[i]]++;
        }           
    }
    //array[n]数组下标就表示的是1-100的年纪,每个年纪下面存储的是该年纪的人数。
}

int main()
{
    vector<int> arr;
    for(int i=0;i<100;i++)
    {
        arr.push_back(rand()%100);
    }
    Grial(arr);
    return 0;
}

#include <iostream>
using namespace std;
//求有序数组旋转之后的最小数字。
int Grial(int a[],int n)
{
    int i = 0;
    int j = n-1;
    while((i+1)!=j)
    {
        int mid = (i+j)/2;  
            if(a[0]<a[j])return a[0];//1 2 3 4 5 6 7 情况的考虑.
            if(a[i]==a[j] && a[mid]==a[i])//1 1 1 1 1 0 0 1情况的考虑.
                {
                for(;i<=j;i++)
                {
                    if(a[i]>a[j])
                        return a[j];
                }
                if(i>j)return a[i];
              }
            if(a[0]>a[mid])//然后就是跟第一个元素的比较,这里有2种情况.
                {   
                    j=mid;
                }
            if(a[0]<=a[mid])
                {
                    i = mid;
                }
    }
    return a[i]>a[j]?a[j]:a[i]; 
}

int main()
{
    int a[]={1,2,3,4,5};
    cout<<Grial(a,5)<<endl;
    return 0;   
}

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。