浏览 4271 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-06-20
要求用C语言编写!谢谢! 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-06-20
引用 将子数组a[0:k]与a[k+1:n-1]换位
嘛意思? 是说讲a[0,k]移到a[n-k-1,n-1],a[k+1,n-1]移到a[0,n-k-2]么? |
|
返回顶楼 | |
发表时间:2007-06-22
len=min(k,n-k)
for(i=0;i<len;i++) swap(a[k-i],a[k+i+1]) |
|
返回顶楼 | |
发表时间:2007-06-23
随手写的,没经过测试,边界条件可能有问题。
数学没学好,不会证明时间复杂度是O(n).不过感觉上是O(n)的。请达人指点。 void swap(int *p1, int *p2, int length) { int i, t; for (i = 0; i < length; ++i) { t = *(p1 + i); *(p1 + i) = * (p2 + i); *(p2 + i) = t; } } void exchange(int *begin, int length, int k) { if (length <= 1) return; if (k <= (length << 1)) { swap(begin, begin + length - k, k); exchange(begin, length - k, k); } else { swap(begin, begin + k, length - k); exchange(begin + length - k, k, 2 * k - length); } } int main() { ... exchange(a, n, k); } |
|
返回顶楼 | |