快速排序算法的递归与非递归实现(C/C++)

10 篇文章 0 订阅
#define  SWAP( x, y )  { int t=x; x=y; y=t; }

// 快速排序算法的递归算法 
void quicksort1( int*A, int beg, int end )
{
    int i, j;
    int p;

    if ( beg >= end )
    {
        return;
    }

    i = beg;
    j = end+1;
    p = A[beg];

    for ( ;; )
    {
        while( ++i <= end && A[i] < p );
        while( A[--j] > p );
        if ( i > j )
            break;
        SWAP( A[i], A[j]);
    }
    SWAP( A[beg], A[j] );

    quicksort1( A, beg, j-1 );
    quicksort1( A, j+1, end );
}

// 快速排序算法的非递归算法
void quicksort2( int* A, int n )
{
	struct sbe
	{
		int beg;
		int end;
	};
	
	sbe* arr = new sbe[n];

	int  m;
	int p;
	int beg, end, i, j;

	m = 0;
	arr[0].beg = 0;
	arr[0].end = n-1;

	for ( ; ; )
	{
		if ( m < 0 )
			break;
		beg = arr[m].beg;
		end = arr[m--].end;

		if ( beg >= end )
			continue;

		// partition 
		p = A[beg];
		i = beg;
		j = end+1;
		for ( ; ; )
		{
			while( ++i <= end && A[i] < p );  // ! while( A[++i] < p ); error
			while( A[--j] > p );
			if ( i > j )
				break;
			SWAP( A[i], A[j] );
		}
		SWAP( A[j], A[beg] );

		arr[++m].beg = beg;
		arr[m].end   = j-1;
		arr[++m].beg = j+1;
		arr[m].end   = end;
	}

	delete [] arr;
}

// 快速排序驱动程序
void QuickSort( int* A      // 带排序数组
	          , int n       // 数组长度
			  , int method  // 采用方法,0 - 递归, 1 - 非递归
			  )
{
	if ( method == 0 )
	{
		quicksort1( A, 0, n-1 );
	}
	else
	{
		quicksort2( A, n );
	}
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值