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

#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 );
	}
}

    原文作者:排序算法
    原文地址: https://blog.csdn.net/yangalbert/article/details/7538951
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞