您的位置:首页 > 职场人生

百度面试题-求1到n个数的排序

2015-07-24 08:15 501 查看
题目:有1,2,3,..n 的无序整数数组,求排序算法。要求尽量快

分析:

正常的无序数组用快排是最快的,但是题目中1到n ,肯定有文章可做,先观察一下。

arr [9,8,3,2,5,1,6,7,10,4]

arrcp[1,2,3,4,5,6,7,8,9,10]

规律

arrcp[arr[i]-1]=arr[i];

但是这个空间复杂度还是有的

那么在arr[]数组内部解决不用arrcp[]

用了两个值 p用来记录arr[i]的值,t用来记录arr[p]的值

这样时间和空间复杂度都降到了最低

void SortOneToN(int arr[],int length)
{
if (arr==NULL || length<=0) {
return ;
}
int p=arr[0];
for (int i=0;i<length;) {
int t=arr[p-1];
if (p==t) {
p++;
if (p>length-1) {
return ;
}
i++;
continue;
}
arr[p-1]=p;
p=t;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: