//问题是:有一万个员工在公司上班,公司为了统计上班人的年纪分布情况,
//请将这一万多的人的年纪进行排序,分析一个比较好的算法.
#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;
}
原文地址:http://blog.csdn.net/liuhuiyan_2014/article/details/45989991