快速Sort

/**************************************
--修改日期:	2009.5.29
--修改人:	           吴强
--修改原因:	从前写的代码不够规范
--输入要求:	无
***************************************/
#include 

#define N 20

main()
{
    int s[N]={20, 4, 3, 1, 5, 6, 34, 23, 12, 43,
    	      53, 42, 23, 14, 25, 26, 15, 11, 21, 11 };
    int i;

    void QuickSort(int *s, int low, int high);
    int Partition(int *s, int i, int j);

    QuickSort(s, 0, N-1);

    for (i=0; i< N; i++)
    {
        printf("%d,",s[i]);
    }
}

 /*快速排序,low,high为指向头尾的下标*/
void QuickSort(int s[], int low, int high)     
{
    int pivotpos;

    if (low< high)                            
    {
    	 /*用递归做完刮分*/
    	pivotpos=Partition(s, low, high);        
    	QuickSort(s, low, pivotpos-1);
    	QuickSort(s, pivotpos+1, high);
    }
}

/*做刮分,返回值所放位置下标*/
int Partition(int s[], int i, int j)         
{
    /*以第一个值为基准(P)*/
    int p=s[i];                        

    /*如果i=j时候退出,表示已经找到基准该放的位置*/
    while(i< j)
    {
    	while(i< j && s[j]>p)    /*从后面起找出不比基准大的值的下标*/
    	{
    	    j--;
    	}

    	if (i< j)      
    	{
    	    s[i++]=s[j];       /*把小的值换到基准前面*/
    	}

    	while(i< j && s[i]< p)   /*接着前面找出不比基准小的值的下标*/
    	{
    	    i++;
    	}

    	if (i< j)
    	{
    	    s[j--]=s[i];       /*把其放到基准后面*/
    	}
    }            

    s[i]=p;

    return i;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值