编写一个函数整理数组,一个数组中存放有若干个数,将其中大于0的数移到数组的前部,

编写一个函数整理数组,一个数组中存放有若干个数,将其中大于0的数移到数组的前部,小于0的数移到数组的后部,等于0的数在数组的中部。在主函数中输入、输出数组,调用自定义函数完成数组的整理。(提示:数组可以用动态申请内存确定数组长度,原始数据可以用随机数函数生成。)

#include<stdio.h>
#include<assert.h>
#include<time.h>
#include<stdlib.h>
int* sort(int *a,int n)
{
    int *tmp;
    tmp=(int*)malloc(sizeof(int)*n);

    int i;
    int left=0;
    int right=n-1;
    for(i=0;i<n;i++)
    {
        if(a[i]<0)//负数放左边
            tmp[left++]=a[i];
        if(a[i]>0)//正数放右边
            tmp[right--]=a[i];
    }
    for(i=left;i<=right;i++)//0放中间。。。有一种人妖的即视感 男的左边 女的右边。。
        tmp[i]=0;
    free(a);//释放a return tmp为整理完的数组
    return tmp;
}
int main(void)
{
    int n;
    printf("input the size of array you want:\n");
    scanf("%d",&n);
    assert(n>0);
    srand(time(NULL));
    int *arr;
    arr=(int*)malloc(n*sizeof(int));
    int i;
    for(i=0;i<n;i++)
    {
        if(rand()&1==1)
            arr[i]=0-rand();
        else
            arr[i]=rand();
    }
    for(i=0;i<n;i++)
        printf("%d ",arr[i]);
    printf("\n");
    printf("after sorted by zero:\n");
    arr=sort(arr,n);//rr指向sort完的数组
    for(i=0;i<n;i++)
        printf("%d ",arr[i]);
    free(arr);
    return 0;
}

感觉你要的是这种把,不过随即产生所有数字很难随即到0,如果你需要很多0,那就得赋值一下,而不是随即产生。

不过楼主你这个问题还有个简单的解决方式就是直接排序就好了,任何排序之后都是负数在前面0在中间正数在后面。。我是按照你写的思路来的,但是排序输出这种解法绝对符合要求。。。

温馨提示:答案为网友推荐,仅供参考
相似回答