1595: A004顺序表:划分2
金币值:1
定数:1
时间限制:1.000 s
内存限制:128 M
正确:6
提交:15
正确率:40.00% 命题人:
题目描述
假设有个顺序表list,所有元素都为整数,现在要调整该顺序表,使得所有小于0的元素放在大于或等于0元素的前面。要求时间复杂度为O(n),空间复杂度为O(1),所以不能用排序。算法描述如下:
- 设置l和r,l指向最左边元素,r指向最右边元素。
- 如果l<r,则进入第3步开始循环。否则,跳转到第4步。
- 调整元素的位置:
- l从左到右,找到大于或等于0的元素
- r从右往左,找到小于0的元素
- 如果此时l<r,交换a[l]和a[r]
- l++,r--
- 返回到第3步
- 算法结束,输出list
请用c/c++实现该算法,函数头如下。并编写main函数进行测试。
void partition(List *&list)
输入格式
两行:
第1行,一个整数n(0<n<10000)
第2行,n个整数
输出格式
一行,n个整数
输入样例 复制
5
-2 1 -2 1 -1
输出样例 复制
-2 -1 -2 1 1