排序算法C++代码(插入,冒泡,改进版冒泡排序)

系统:Win7

开发工具:Visual Studio 2008



代码:

#include <iostream>
using namespace std;

/ 
/// @brief 插入排序 时间:O(n^2)
/// @param[in] pTemp 原始序列
/// @param[in] nNum 原始序列长度
/// @param[out] 0:成功 1:失败
/ 
int InsertSort( int*& pTemp, int nNum );

/ 
/// @brief 冒泡排序 时间:O(n^2)
/// @param[in] pTemp 原始序列
/// @param[in] nNum 原始序列长度
/// @param[out] 0:成功 1:失败
/ 
int BubbleSort( int*& pTemp, int nNum );

/ 
/// @brief 改进版冒泡排序 时间:O(n^2) 优化为:不需要冒泡排序则不再循环了,减少计算量
/// @param[in] pTemp 原始序列
/// @param[in] nNum 原始序列长度
/// @param[out] 0:成功 1:失败
/ 
int ImprovedBubbleSort( int*& pTemp, int nNum );

void main()
{
	//插入排序
	int* pInsertSortData = new int[10];
	for( int i = 0; i < 10; i++ )
		pInsertSortData[i] = 9 - i;
	if( InsertSort( pInsertSortData, 10 ) == 0 )
		cout<<"插入排序完成!\n";
	else
		cout<<"插入排序失败!\n";
	for( int i = 0; i < 10; i++ )
		cout<<pInsertSortData[i]<<endl;
	delete[] pInsertSortData;

	//冒泡排序
	int* pBubbleSortData = new int[10];
	for( int i = 0; i < 10; i++ )
		pBubbleSortData[i] = 9 - i;
	if( BubbleSort( pBubbleSortData, 10 ) == 0 )
		cout<<"冒泡排序完成!\n";
	else
		cout<<"冒泡排序失败!\n";
	for( int i = 0; i < 10; i++ )
		cout<<pBubbleSortData[i]<<endl;
	delete[] pBubbleSortData;

	//递归版冒泡排序:为选取原始序列一段一段的排序,最后综合,不单独写了

	//改进版冒泡排序
	int* nImprovedBubbleSortData = new int[10];
	for( int i = 0; i < 10; i++ )
		nImprovedBubbleSortData[i] = 9 - i;
	if( ImprovedBubbleSort( nImprovedBubbleSortData, 10 ) == 0 )
		cout<<"改进版冒泡排序完成!\n";
	else
		cout<<"改进版冒泡排序失败!\n";
	for( int i = 0; i < 10; i++ )
		cout<<nImprovedBubbleSortData[i]<<endl;
	delete[] nImprovedBubbleSortData;
}

int InsertSort( int*& pTemp, int nNum )
{
	if ( pTemp == 0x0 )
	{
		cout<<"初始序列为空\n";
		return -1;
	}
	if( nNum <= 0 )
	{
		cout<<"初始序列长度小于0\n";
		return -1;
	}

	//插入排序:为后边的元素与前边的元素比较大小,如果后边的小,则放在前边来
	for( int i = 1; i < nNum; i++ )
	{
		for( int j = 0; j < i; j++ )
		{
			if( pTemp[i] < pTemp[j] )
			{
				int nTemp = pTemp[i];
				pTemp[i] = pTemp[j];
				pTemp[j] = nTemp;
			}
		}
	}
	return 0;
}

int BubbleSort( int*& pTemp, int nNum )
{
	if ( pTemp == 0x0 )
	{
		cout<<"初始序列为空\n";
		return -1;
	}
	if( nNum <= 0 )
	{
		cout<<"初始序列长度小于0\n";
		return -1;
	}
	//冒泡排序:相邻两个元素比较大小,后边大则互换位置,从后往前,循环全部个数即可
	for ( int i = 0; i < nNum; i++ )
	{
		for( int j = nNum - 1; j > i; j-- )	//注:循环i次,则找到了i个最小的了,所以j>i即可
		{
			if( pTemp[j] < pTemp[j-1] )
			{
				int nTemp = pTemp[j];
				pTemp[j] = pTemp[j-1];
				pTemp[j-1] = nTemp;
			}
		}
	}
	return 0;
}

int ImprovedBubbleSort( int*& pTemp, int nNum )
{
	if ( pTemp == 0x0 )
	{
		cout<<"初始序列为空\n";
		return -1;
	}
	if( nNum <= 0 )
	{
		cout<<"初始序列长度小于0\n";
		return -1;
	}

	bool bFlag = true;	//是否还需要交换,例如:第一次循环都不需要交换,证明本身已经排序好了,不用再循环了

	//冒泡排序:相邻两个元素比较大小,后边大则互换位置,从后往前,循环全部个数即可
	for ( int i = 0; i < nNum; i++ )
	{
		if( bFlag == false )
			return 0;
		bFlag = false;

		for( int j = nNum - 1; j > i; j-- )	//注:循环i次,则找到了i个最小的了,所以j>i即可
		{
			if( pTemp[j] < pTemp[j-1] )
			{
				int nTemp = pTemp[j];
				pTemp[j] = pTemp[j-1];
				pTemp[j-1] = nTemp;

				bFlag = true;
			}
		}
	}
	return 0;
}


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值