您的位置:首页 > 职场人生

据说是淘宝面试题“给定一个数组将大于0的放在最右边,等于0的放在中间,大于0的放在最左边”

2013-09-23 11:30 771 查看
给定一个数组将大于0的放在最右边,等于0的放在中间,大于0的放在最左边;

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define random (rand()%10-5)
void swap(int *a, int *b)//交换两个整型数
{
int t = *a;
*a = *b;
*b = t;
}

void move_array(int a[], int n)
{
int *low = a, *high = a + n-1;
while(low < high)
{
while(*low < 0 && low < high) low++;
while(*high > 0 && high > low) high--;
if(low < high)
swap(low, high);
}
//循环结束后low一定等于high且指向大于等于0的数
//第二步,从low开始,将等于0得数移到左边
high = a + n-1;
while(low < high)
{
while(*low == 0 && low < high) low++;
while(*high > 0 && high > low) high--;
if(low < high)
swap(low, high);
}
}
int main()
{
srand(time(NULL));
int a[10];
int i;
for(i = 0; i < 10; i++)
{
a[i] = random;
}
move_array(a, 10);
for(i = 0; i < 10; i++)
{
printf("%-5d", a[i]);
}
printf("\n");

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐