第十章(5).冒泡排序
来源:互联网 发布:盛世赢家软件下载 编辑:程序博客网 时间:2024/05/17 02:30
#include <iostream>
using namespace std ;#define MAXSIZE 20 //存储元素的顺序表的最大长度
typedef int KeyType ; //关键字类型
typedef int InfoType ; //其他数据项类型typedef struct {
KeyType key ;
InfoType otherinfor ; //其他数据项
} RedType ;typedef struct {
RedType r[ MAXSIZE + 1 ] ; //r[0]闲置或用作哨兵单元
int length ; //顺序表长度
} SqList ; //顺序表类型void InPut( SqList &L )
{
int value = 0 ;
int i = 1 ;
while( i < ( MAXSIZE + 1 ) )
{
cin >> value ;
if( value == -1 ) //以-1为结束符
break ;
L.r[ i ++ ].key = value ;
}
L.length = i - 1 ;
}void BubbleSort( SqList &L )
{
int j = 0 ;
bool change ;for( int i = 1 ; i < L.length ; ++ i ) //最多n-1趟排序
{
change = false ; //用于减少排序次数的(排序次数小于n-1)
for( j = 1 ; j < L.length - i + 1 ; ++ j ) //第i趟冒泡排序是从L.r[1]到L.r[n-i+1]依次比较相邻两个记录的关键字,并在"逆序"时交换相邻的记录
{ //其结果是这n-i+1个记录中关键字最大的记录被交换到第n-i+1的位置上
if( L.r[ j ].key > L.r[ j + 1 ].key ) //Take care! It's "j < L.length - i + 1" , not "j < L.length - i + 2" ! Because it's "L.r[ j ].key > L.r[ j + 1 ].key ". Compare with "j + 1".
{
L.r[ 0 ] = L.r[ j ] ;
L.r[ j ] = L.r[ j + 1 ] ;
L.r[ j + 1 ] = L.r[ 0 ] ;
change = true ;
}
}
if( !change )
return ;
}
}
void OutPut( SqList L )
{
for( int i = 1 ; i < L.length + 1 ; ++ i )
{
cout << L.r[ i ].key << ' ' ;
}
cout << endl ;
}int main( )
{
SqList L ;InPut( L ) ; //49 38 65 97 76 13 27 49 -1(结束符)
BubbleSort( L ) ;
OutPut( L ) ;return 0 ;
}
- 第十章(5).冒泡排序
- 第十天、冒泡排序
- 冒泡法数组排序(第十四周上机任务)
- 排序5:交换排序(冒泡排序)
- 第十四周项目一: 冒泡排序
- 第十四周 函数版 冒泡排序
- 第十四周项目二 排序函数模板(动态分配内存+冒泡排序)
- 第十四周上机实践项目1(1):排序函数模板(冒泡法排序)
- 八大排序算法(5) 冒泡排序
- 第十四周 选择排序 冒泡排序打混编
- 冒泡排序(包括局部冒泡排序)
- 第十四周项目4--冒泡法数组排序
- 第十四周——数组冒泡定义排序
- 第十章(1).直接插入排序
- 第十章(2).折半插入排序
- 第十章(4).希尔排序
- 第十章(6).快速排序
- 第十章(7).选择排序
- Oracle 11g R2安装手册 For Win7 (图文教程)
- 第十章(2).折半插入排序
- edx安装汉化包
- 第十章(4).希尔排序
- PHP纪实
- 第十章(5).冒泡排序
- 第十章(6).快速排序
- 第十章(7).选择排序
- 第十章(8).堆排序
- 第十章(9).归并排序(递归)
- 第十章(10).归并排序(非递归)
- 第十章(11).基数排序
- C++扫盲系列--第一个服务器程序
- 第十一章(1).多路平衡归并排序