您的位置:首页 > 其它

有1,2,3一直到n的无序数组,排序

2011-09-15 16:18 218 查看
题目:有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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐