顺序表元素分块(左负右正中间零)

时间:2020-12-11 19:33:16
#include <stdio.h>
void partSort(int arr[],int l,int r)
{
    int p=l,i=l,t,cnt=0;
    printf("\n负数调在前\n");
    for(;i<=r;i++)
    {
        if(arr[i]<0)
        {
            t=arr[i];arr[i]=arr[p];arr[p]=t;
            p++;
        }
    } //p停止在第一个非负数上面;
    
    for(i=l;i<=r;i++)
        printf("%6d",arr[i]);
    printf("\n");
    while(arr[p]==0)//过滤掉零
        p++;
    printf("把零调在正数前\n");
    for(i=r;i>=p;i--)
        if(arr[i]==0)
        {    
            t=arr[i];arr[i]=arr[p];arr[p]=t; 
            while(arr[p]==0)//过滤掉零
                p++;
            cnt++;
        }
    for(i=l;i<=r;i++)
        printf("%6d",arr[i]);
    printf("\n");
 
}
void main()
{
    int arr[]={3,-1,2,0,-3,8,9,-4,0,2};
    printf("原始数据\n");
    for(int i=0;i<=9;i++)
        printf("%6d",arr[i]);
    partSort(arr,0,9);
}