转载 一个时间复杂度为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
有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
相关文章推荐
- 一串首尾相连的珠子(m 个),有N 种颜色(N<=10),设计一个算法,取出其中一段,要求包含所有N 中颜色,并使长度最短。并分析时间复杂度与空间复杂度。
- 3月24日 想到了一个字符串匹配的新算法 程序 时间复杂度自己不会算
- n个无序整数,已知第i个数在排好序的序列中的位置为j,满足|i-j|<=K,请设计一种排序算法,对该序列进行排序。注:算法时间复杂度为O(nlgn)的得0分,复杂度为O(nk) 的得两分,总分是20分
- 【微软100题】一个台阶总共有n 级,如果一次可以跳1 级,也可以跳2 级,求总共有多少总跳法,并分析算法的时间复杂度
- 如何计算一个算法的时间复杂度
- 算法基础-时间复杂度和空间复杂度(转载)
- 题目:某公司有几万名员工,请完成一个时间复杂度为O(n)的算法对该公司员工的年龄作排序,可使用O(1)的辅助空间。
- 一个比较好用的轻量级时间选择控件 &nbsp; ----- &nbsp; JQUERY特效模板
- 笔试题&面试题:设计一个复杂度为n的算法找到单向链表倒数第m个元素
- 长度为n的顺序表L,编写一个时间复杂度为O(n),空间复杂度为O(1)的算法,该算法删除线性表中所有值为X的元素
- 你真的了解位运算?用了这个运算符,算法的时间复杂度竟然降了一个数量级!
- 给一个数组[a1,a2,a3....an],要求出令ai-aj有最大值,其中i<=j,时间和空间复杂度尽可能小
- 设M 是一个m×n 的矩阵,其中每行的元素从左到右单增有序,每列的元素从上到下单增有序。 给出一个分治算法计算出给定元素x 在M 中的位置或者表明x 不在M 中。分析算法的时间复杂性。
- 如何计算一个算法的时间复杂度
- 一串首尾相连的珠子(m个),有N种颜色(N《=10),设计一个算法,取出其中一段,要求包含所有N中颜色,并使长度最短。并分析时间复杂度与空间复杂度。
- 算法面试题——两个有序数组,将一个数组放入另一个空间很大的数组,要求合并之后依然有序,时间复杂度要求最小,不使用额外的数组。
- 根据算法时间复杂度估算算法运行时间的示例及“对数Lg (x)"的灵活应用
- 一个台阶总共有n级,如果一次可以跳1级,也可以跳2级。 //求总共有多少总跳法,并分析算法的时间复杂度
- 【算法题】题目:一个台阶总共有n级,如果一次可以跳1级,也可以跳2级。 求总共有多少总跳法,并分析算法的时间复杂度
- 《数据结构》2.10设计一个算法,删除顺序表中值为item的元素,要求算法的时间复杂度是O(n),空间复杂度是O(1)