将数组所有整数排在负数之前

原题

设任意n个整数存放于数组A中,编写程序,将所有整数排在所有负数前面。

思路

题目超级水,直接上代码了。

实现代码

/*************************************************************************
    > File Name: testmain.c
    > Author: KrisChou
    > Mail:[email protected]
    > Created Time: Mon 18 Aug 2014 12:26:34 AM CST
 ************************************************************************/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

void print(int *arr, int n);
void partion(int *arr, int n);

int main(int argc, char *argv[])
{
    int size = atoi(argv[1]);
    int *arr = (int*)calloc(size,sizeof(int));
    int index;
    srand(time(NULL));
    for(index = 0; index < size; index++)
    {
        if(rand()%2 == 0)
        {
            arr[index] = rand()%100;
        }else
        {
            arr[index] = - rand()%100;
        }

    }
    print(arr,size);
    partion(arr,size);
    print(arr,size);

    return 0;
}

void print(int *arr, int n)
{
    int index;
    for(index = 0; index < n; index++)
    {
        printf("%4d",arr[index]);
    }
    printf("\n");
}

/**
 * 如果low++,使得low与high相遇,那么low左边元素已在正确位置,high右边元素(包括high)也在正确位置,finish。
 * 如果high--,使得low与high相遇,那么low左边元素(包括low)已在正确位置,high右边元素也在正确位置,finish。
 */
void partion(int *arr, int n)
{
    int low = 0;
    int high = n - 1;
    int tmp;
    while(low < high)
    {
        while(low < high && arr[low] >= 0)
        {
            low++;
        }
        if(low == high)
        {
            break;
        }
        while(low < high && arr[high] < 0)
        {
            high--;
        }
        if(low < high)
        {
            tmp = arr[low];
            arr[low] = arr[high];
            arr[high] = tmp;
        }
    }
}

将数组所有整数排在负数之前,布布扣,bubuko.com

时间: 2024-10-05 05:02:07

将数组所有整数排在负数之前的相关文章

力扣题目汇总(加一,旋转数组,整数反转)

力扣题目汇总(加一,旋转数组,整数反转) 加一 1.题目描述 给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一. 最高位数字存放在数组的首位, 数组中每个元素只存储一个数字. 你可以假设除了整数 0 之外,这个整数不会以零开头. 示例 1: 输入: [1,2,3] 输出: [1,2,4] 解释: 输入数组表示数字 123. 示例 2: 输入: [4,3,2,1] 输出: [4,3,2,2] 解释: 输入数组表示数字 4321. 2.解题思路 #错误思路 列表最后一位加1,判断最后

给定一个整数数组(有正数和负数),找出总和最大的连续数列,并返回总和。

示例: 输入:2 , -8 ,3 , -2  ,4 ,-10 输出: 5 (即{3 ,-2 ,4})

打印整数(包含负数)在计算机内部的二进制表示

在理解整数的二进制表示之前我们首先要知道以下三个概念:源码.补码和反码.源码就是一个整数的二进制表示,其中最高位为符号位,我们用0表示正数,用1表示负数.如果用8位表示一个整数的话,5的源码我们可以表示为00000101.-6的源码我们可以表示为10000110.反码是将源码符号位(也就是最高位)不变,其他位取反得到的二进制码.补码是将反码反码按位加上二进制数1得到的二进制码. 在计算机系统中,数值一律用补码来表示和存储.原因在于,使用补码,可以将符号位和数值位统一处理:同时,加法和减法也可以统

Java中数组的快排

描述输入三个字符(可以重复)后,按各字符的ASCII码从小到大的顺序输出这三个字符. 输入 第一行输入一个数N,表示有N组测试数据.后面的N行输入多组数据,每组输入数据都是占一行,有三个字符组成,之间无空格. 输出 对于每组输入数据,输出一行,字符中间用一个空格分开. 样例输入 3 qwe asd zxc 样例输出 e q w a d s c x z 1 import java.util.Arrays; 2 import java.util.Scanner; 3 4 public class M

[LeetCode] Find the Derangement of An Array 找数组的错排

In combinatorial mathematics, a derangement is a permutation of the elements of a set, such that no element appears in its original position. There's originally an array consisting of n integers from 1 to n in ascending order, you need to find the nu

lintcode 中等题 :Maximum Product Subarray 最大连续乘积子序列

题目 乘积最大子序列 找出一个序列中乘积最大的连续子序列(至少包含一个数). 样例 比如, 序列 [2,3,-2,4] 中乘积最大的子序列为 [2,3] ,其乘积为6. 解题  法一:直接暴力求解 时间复杂度O(N2) public class Solution { /** * @param nums: an array of integers * @return: an integer */ public int maxProduct(int[] nums) { // write your c

返回一个整数数组(环形数组)中最大子数组的和

一.实验题目 题目:返回一个整数数组中最大子数组的和. 要求:      输入一个整形数组,数组里有整数也有负数.      数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.      如果数组A[0]……A[j-1]首尾相邻,允许A[i-1],……A[n-1],A[0]……A[j-1]之和最大.      同时返回最大子数组的位置. 求所有子数组的和的最大值.要求时间复杂度为O(n). 二.实验思路 由于这次所要求的子数组相当于一个环形的数组,所以就想到了类似数字右循环的形式来

面试题:在一个数组中有0-99之间的整数101个(数组无序),用高效方法找出其中的唯一的重复元素!

/* * 问题:找出101个数据中重复的元素 * 题目如下:现有0到99,共计100个整数,各不相同,将所有数放入一个数组,随机排布. *        数组长度101,多余的数字是0到99其中任意一个数(唯一重复的数字) *        请将这个重复的数字找出来 * 分析: *    A:把数组构造出来 *    B:把数组元素添加进去 *    C:对数组的元素进去打乱(随机分布) *    D:找出重复的元素 */ 这道题有三种方式:第一种用交换排序找出,第二种求数组的和再减去0-99,

返回一个整数数组中最大子数组的和Ⅱ

要求: • 要求程序必须能处理1000 个元素: • 每个元素是int32 类型的,出现子数组之和大于整型表示的最大范围会出现什么情况: • 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值. • 要求时间复杂度为O(n). 程序源代码: 1 public class Main { 2 public static void main(String[] args){ 3 int numberLength = 100