题目:有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;
}
}