三部排序

来源:互联网 发布:淘宝用的上下架软件 编辑:程序博客网 时间:2024/06/09 23:59
三部排序
一般的排序有许多经典算法,如快速排序、希尔排序等。
但实际应用时,经常会或多或少有一些特殊的要求。我们没必要套用那些经典算法,可以根据实际情况建立更好的解法。
比如,对一个整型数组中的数字进行分类排序:

使得负数都靠左端,正数都靠右端,0在中部。注意问题的特点是:负数区域和正数区域内并不要求有序。可以利用这个特点通过1次线性扫描就结束战斗!!

#include<stdio.h>
void fun(int x[], int len)  
{  
    int p = 0;  
    int left = 0;  
    int right = len-1;  
    int t;
    while(p<=right){  
        if(x[p]<0){  
            t = x[left];  
            x[left] = x[p];  
            x[p] = t;  
            left++;  
            p++;  
        }  
        else if(x[p]>0){  
            int t = x[right];  
            x[right] = x[p];  
            x[p] = t;  
            right--;              
        }  
        else{  
            p++;  
        }  
    }  
      
}  
int main()
{
int n;

scanf("%d",&n);
int a[n] ;
int i;
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);

fun(a,n);
for(i=0;i<n;i++)
printf("%d   ",a[i]);

}

0 0
原创粉丝点击