码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-05-26 09:19:05      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:旋转   排序   数组   

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

#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;   
}

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

标签:旋转   排序   数组   

原文地址:http://blog.csdn.net/liuhuiyan_2014/article/details/45989991

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