系统: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; }
排序算法C++代码(插入,冒泡,改进版冒泡排序)
最新推荐文章于 2020-03-04 16:06:32 发布