快速排序

ElementType Median3( ElementType A[], int Left, int Right )
	{ 
	    int Center = (Left+Right) / 2;
	    if ( A[Left] > A[Center] )
	        Swap( &A[Left], &A[Center] );
	    if ( A[Left] > A[Right] )
	        Swap( &A[Left], &A[Right] );
	    if ( A[Center] > A[Right] )
	        Swap( &A[Center], &A[Right] );
	    /* 此时A[Left] <= A[Center] <= A[Right] */
	    Swap( &A[Center], &A[Right-1] ); /* 将基准Pivot藏到右边*/
	    /* 只需要考虑A[Left+1] … A[Right-2] */
	    return  A[Right-1];  /* 返回基准Pivot */
	}
	 
void Qsort( ElementType A[], int Left, int Right )
	{ /* 核心递归函数 */ 
	     int Pivot, Cutoff, Low, High;
	       
	     if ( Cutoff <= Right-Left ) { /* 如果序列元素充分多,进入快排 */
	          Pivot = Median3( A, Left, Right ); /* 选基准 */ 
	          Low = Left; High = Right-1;
	          while (1) { /*将序列中比基准小的移到基准左边,大的移到右边*/
	               while ( A[++Low] < Pivot ) ;
	               while ( A[--High] > Pivot ) ;
	               if ( Low < High ) Swap( &A[Low], &A[High] );
	               else break;
	          }
	          Swap( &A[Low], &A[Right-1] );   /* 将基准换到正确的位置 */ 
	          Qsort( A, Left, Low-1 );    /* 递归解决左边 */ 
	          Qsort( A, Low+1, Right );   /* 递归解决右边 */  
	     }
	     else InsertionSort( A+Left, Right-Left+1 ); /* 元素太少,用简单排序 */ 
	}
	 
void QuickSort( ElementType A[], int N )
	{ /* 统一接口 */
	     Qsort( A, 0, N-1 );
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值