C语言中数组的基本问题

看了半天都不会,求解答
设计函数void partion(int a[],int i),将长度为n的数组a中的所有负数调整到数组的前面,所有非负数调整到数组的后面,并编写测试程序

一个下标从左到右,一个下标从右到左
左侧元素为负数时,向右移动下标;右侧元素为正数时,向左移动下标
如果都停下来,进行数值交换
直到左侧小标值大于等于右侧下标值

#include<stdio.h>

void partion(int a[],int n)
{
    int left = 0,right = n-1,t;
    while(left < right)
    {
        while(a[left] < 0 && left < right)
            left++;
        while(a[right] >= 0 && right > left)
            right--;
        if(left < right)
        {
            t = a[left];
            a[left] = a[right];
            a[right] = t;
            left++;
            right--;
        }
    }
}

int main()
{
    int a[10];
    for(int i=0;i<10;i++)
        scanf("%d",&a[i]);
    partion(a,10);
    for(int i=0;i<10;i++)
        printf("%d ",a[i]);
    return 0;
}