题目:有1,2,3,..n 的无序整数数组,求排序算法。
时间复杂度 O(n) 空间复杂度O(1)
分析:
对于一般数组的排序显然 O(n) 是无法完成的。
既然题目这样要求,肯定原先的数组有一定的规律,让人们去寻找一种机会。
例如:原始数组:
a = [ 10, 6,9, 5,2, 8,4,7,1,3 ]
如果把它们从小到大排序且应该是
b = [1,2,3,4,5,6,7,8,9,10 ]
也就是说: 如果我们观察 a --> b 的对映关系是:
a[ i ] 在 b 中的位置是 b[ a[i] - 1]
#include<iostream>
using namespace std;
void sortoneton(int a[],int n)
{
for(int i=0;i<n;)
{
int temp=a[a[i]-1];
a[a[i]-1]=a[i];
a[i]=temp;
if(a[i]==i+1)
i++;
}
for(int i=0;i<n;i++)
cout<<a[i]<<",";
}
int main()
{
int a[10]={10,6,9,3,2,5,7,1,8,4};
sortoneton(a,10);
return 0;
}