HUFEOJ正在加载中...

1595: A004顺序表:划分2

金币值:1 定数:1 时间限制:1.000 s 内存限制:128 M
正确:6 提交:15 正确率:40.00% 命题人:
点赞量:0 收藏量:0 题目类型:程序 知识点: 顺序表

题目描述

假设有个顺序表list,所有元素都为整数,现在要调整该顺序表,使得所有小于0的元素放在大于或等于0元素的前面。要求时间复杂度为O(n),空间复杂度为O(1),所以不能用排序。算法描述如下:


  1. 设置l和r,l指向最左边元素,r指向最右边元素。
  2. 如果l<r,则进入第3步开始循环。否则,跳转到第4步。
  3. 调整元素的位置:
    • l从左到右,找到大于或等于0的元素
    • r从右往左,找到小于0的元素
    • 如果此时l<r,交换a[l]和a[r]
    • l++,r--
    • 返回到第3步
  4. 算法结束,输出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