写一个时间为 (n lg n )的算法

来源:百度知道 编辑:UC知道 时间:2024/05/06 02:27:41
设计一个算法为(N LG N )的算法,在一个实数数组A, 和一个实数X,判断A中是否存在2个数的和等于X

下面是我写的伪代码
伪代码:
1 float A[100] ; x;
2 Fenjie (folat A[]; n;m;)
If(n<m)
Mid = 0 ;
Mid = ( n + m )/ 2 //分解
Fenjie ( A[];n;mid) //左边
Fenjie (A[];mid+1;m) //右边
qiuhe ( A[];n;mid;m;)
While ( n<mid && mid+1 < m) //不超出界限
If ( A[n] )+ A[mid+1]! = x )
{n++;};//指向下一个
mid+1 ++ ;//全部不等于的时候 mid + 1 ++
n = 0;//n 重新开始计数

我的算法我知道肯定还有错,也达不到算法的要求。

当2个 数组 的元素不相等的时候, 该如何去写?

大哥大姐们 有空的写个代码 没空了讲讲算法 谢谢啦

可以这样,先用一次快速排序,让序列有序化,时间复杂度O(NlogN)

然后,对每一个数Ni,用二分查找找X-Ni,二分查找的时间复杂度是O(logN),所以这一步的时间复杂度就是O(NlogN)

所以算法的整体复杂度就是O(NlogN)