#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 );
}
}
快速排序算法的递归与非递归实现(C/C++)
原文作者:排序算法
原文地址: https://blog.csdn.net/yangalbert/article/details/7538951
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
原文地址: https://blog.csdn.net/yangalbert/article/details/7538951
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。