对一个一维整形数组进行排序,使其元素的顺序为0在中间,负数在前面,正数在后面。
代码
#include <stdio.h>
#include <conio.h>
void rest(int a[],int n)
{
int i,j,high,low,temp;
high = n-1;
low = 0;
for (i = 0;i<=high;)
{
//如果a[i]<0,则与第一个元素交换并将第一个元素指向第二个。
if (a[i]<0)
{
temp = a[low];
a[low] = a[i];
a[i] = temp;
low++;
i++;
}
//如果a[i]>0,则将a[i]与最后一个元素交换,同时,最后一个元素指向倒数第二个元素。
if (a[i]>0)
{
temp = a[high];
a[high] = a[i];
a[i] = temp;
high--;
}
//如果a[i]=0则不直接跳转到下一个元素。
if (0 == a[i])
{
i++;
}
}
}
void main()
{
int i;
int a[] = {2,9,5,3,7,0,-1,15};
int size = sizeof(a)/sizeof(a[0]);
printf("the original array is: \n");
for (i = 0; i < size; i++)
{
printf("%4d",a[i]);
}
rest(a,size);
printf("\nthe new array is:\n");
for (i = 0; i < size; i++)
{
printf("%4d",a[i]);
}
printf("\nplease enter any button to quit");
getch();
}
执行结果: