#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在中间正数在后面。。我是按照你写的思路来的,但是排序输出这种解法绝对符合要求。。。