您的位置:首页 > 其它

转载 一个时间复杂度为O(N)的算法

2014-08-29 22:27 260 查看
36.
有1,2,….一直到n的无序数组,求排序算法,并且要求时间复杂度为O(n),空间复杂度O(1),使用交换,而且一次只能交换两个数。
快速排序被认为是速度最快算法
,时间复杂度是:nlog(n),下面这个是O(n),当然是有一定的条件的,不具普遍性,但是它的思路还是挺有技巧的。

1~N的数组,那么排序后必然a[0]=1,a[1]=2,a[2]=3........也就是元素值必定是存放在比值小1的数组元素中,那么只需
a
和a[a
-1]相交换即可。
有1,2,....一直到n 的无序数组, 求排序算法, 并且要求时间复杂度为O(n),空间复杂度O(1),
使用交换, 而且一次只能交换两个数.(华为)
#include
int main()
{
int a[]
= {10,6,9,5,2,8,4,7,1,3};
int len = sizeof(a) /
sizeof(int);
int
temp;
for(int i = 0; i <
len; )

{
temp = a[a[i] - 1];
a[a[i] - 1] = a[i];
a[i] = temp;
if ( a[i] == i + 1)

i++;
} //for_i
for (int j = 0; j <
len; j++)

cout<<a[j]<<",";
return
0;
}

本文章来自 http://hi.baidu.com/orchard/item/51eb5c2f0fe7d80a73863e0f
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐