首页 > 代码库 > 将数组所有整数排在负数之前

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

原题

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

思路

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

实现代码

/*************************************************************************    > File Name: testmain.c    > Author: KrisChou    > Mail:zhoujx0219@163.com     > 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;        }    }}