順序表元素分塊(左負右正中間零)

#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);
}
相關文章
相關標籤/搜索