首页 > 试题广场 >

设有一整数序列由正数、负数组成,编写程序,通过一趟扫描处理,

[问答题]
设有一整数序列由正数、负数组成,编写程序,通过一趟扫描处理,将所有的负数移到正数前面,只能用一个辅助单元。写出算法思想。
//用两个指针i(从前往后扫描),j(从后往前扫描),当位置i的元素大于零并且
//位置j的元素小于零时,则用temp作为中间变量,交换它们的值。
//i>=j时算法结束,扫描一次,时间复杂度为o(n)。
void solve(int A[],int N){
    int i=0,j=N-1;
    while(i<j){
        if(A[i]<0)i++;
        if(A[j]>0)j--;
        if(A[i]>0&&A[j]<0){
            int temp=A[i];
            A[i]=A[j];
            A[j]=temp;
        }
    }
}
发表于 2021-11-22 16:11:57 回复(0)
我的想法是利用快速排序算法,将0作为标志进行排序
发表于 2019-12-03 21:43:00 回复(0)
使用链表初始化整个序列。声明一个节点类型的变量temp,遍历链表,如果当前节点的值为负数,将值赋给temp,随后删除该节点,再使用头插法将temp插入链表。
发表于 2019-11-24 20:42:24 回复(0)