排序算法C++代码——快速排序

大家都说快排不太容易理解,我给大家简单讲一下。

不复制别人说的话了,自己按自己想的说,全是大白话哈哈:

  1. 第一次,设定范围为整体。
  2. 随机选个数,大于它的放右边,小于它的放左边。
  3. 设定范围为左边小于刚才随机数的范围,走步骤2,3,4.
  4. 设定范围为右边大于刚才随机数的范围,走步骤2,3,4.
  5. 若分不出左右边了,则完成排序。

 

#include <iostream>
using namespace std;

/ 
/// @brief 快速排序
/// @param[in] pTemp 原始序列
/// @param[in] nNum 原始序列长度
/// @param[out] 0:成功 1:失败
/ 
int quickSort( int*& pFaseSortData, int nStartIndex, int nEndIndex );

void main()
{
	//插入排序
	int nSize = 100;
	int* pFaseSortData = new int[nSize];
	for( int i = 0; i < nSize; i++ )
		pFaseSortData[i] = nSize - 1 - i;
	if( quickSort( pFaseSortData, 0, nSize - 1 ) == 0 )
		cout<<"快速排序完成!\n";
	else
		cout<<"快速排序失败!\n";

	for( int i = 0; i < nSize; i++ )
		cout<<pFaseSortData[i]<<endl;
	delete[] pFaseSortData;

}

int quickSort( int*& pFaseSortData, int nStartIndex, int nEndIndex )
{
	int i,j;
	i = nStartIndex;
	j = nEndIndex;
	if( ( pFaseSortData == NULL ) || ( ( nEndIndex - nStartIndex ) == 0 ) )
		return -1;

	while( i < j )
	{
		//拿第i个元素和第j个元素比较,若小,则减小j,然后再和j元素比较,若大,则两个数互换位置
		while( i < j && pFaseSortData[i] <= pFaseSortData[j] )	
			j--;
		if( i < j )									
		{                 
			int nTemp = pFaseSortData[i];
			pFaseSortData[i] = pFaseSortData[j];
			pFaseSortData[j] = nTemp;
		}

		//拿第i个元素和和第j个元素比较,若小,则增加i,然后再和j元素比较,若大,则互换位置。
		while( i < j && pFaseSortData[i] < pFaseSortData[j] )	
			i++;
		if( i < j )												
		{                 
			int nTemp = pFaseSortData[i];
			pFaseSortData[i] = pFaseSortData[j];
			pFaseSortData[j] = nTemp;
		}
	}

	//因为上边i==j才跳出,所以在此快排时,需要用0到i,i+1( 代码中(j+1)==(i+1) )到最后才快排了
	if( i - nStartIndex > 1 )
		quickSort( pFaseSortData, 0, i );				//递归调用,把key前面的完成排序
	if( nEndIndex - j > 1 )
		quickSort( pFaseSortData, j + 1, nEndIndex );		//递归调用,把key后面的完成排序

	return 0;
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值