C++冒泡排序数据结构、算法及改进算法
程序代码如下:
//BubbleSort.cpp:定义控制台应用程序的入口点。
//
#include"stdafx.h"
#include<cmath>
#include<iostream>
usingnamespacestd;
#define MAXNUM20
template<typenameT>
voidSwap(T&a,T&b)
{
intt=a;
a=b;
b=t;
}
template<typenameT>
voidBubble(Ta[],intn)
{//把数组a[0:n-1]中最大的元素通过冒泡移到右边
for(inti=0;i<n-1;i++)
{
if(a[i]>a[i+1])
Swap(a[i],a[i+1]);
}
}
template<typenameT>
voidBubbleSort(Ta[],intn)
{//对数组a[0:n-1]中的n个元素进行冒泡排序
for(inti=n;i>1;i--)
Bubble(a,i);
}
int_tmain(intargc,_TCHAR*argv[])
{
inta[MAXNUM];
for(inti=0;i<MAXNUM;i++)
{
a[i]=rand()%(MAXNUM*5);
}
for(inti=0;i<MAXNUM;i++)
cout<<a[i]<<" ";
cout<<endl;
BubbleSort(a,MAXNUM);
cout<<"AfterBubbleSort:"<<endl;
for(inti=0;i<MAXNUM;i++)
cout<<a[i]<<" ";
cin.get();
return0;
}
但是常规的冒泡,不管相邻的两个元素是否已经排好序,都要冒泡,这就没有必要了,所有我们对这点进行改进。设计一种及时终止的冒泡排序算法:
如果在一次冒泡过程中没有发生元素互换,则说明数组已经按序排列好了,没有必要再继续进行冒泡排序了。代码如下:
//BubbleSort.cpp:定义控制台应用程序的入口点。
//
#include"stdafx.h"
#include<cmath>
#include<iostream>
usingnamespacestd;
#define MAXNUM20
template<typenameT>
voidSwap(T&a,T&b)
{
intt=a;
a=b;
b=t;
}
template<typenameT>
boolBubble(Ta[],intn)
{//把数组a[0:n-1]中最大的元素通过冒泡移到右边
boolswapped=false;//尚未发生交换
for(inti=0;i<n-1;i++)
{
if(a[i]>a[i+1])
{
Swap(a[i],a[i+1]);
swapped=true;//发生了交换
}
}
returnswapped;
}
template<typenameT>
voidBubbleSort(Ta[],intn)
{//对数组a[0:n-1]中的n个元素进行冒泡排序
for(inti=n;i>1&&Bubble(a,i);i--);
}
int_tmain(intargc,_TCHAR*argv[])
{
inta[MAXNUM];
for(inti=0;i<MAXNUM;i++)
{
a[i]=rand()%(MAXNUM*5);
}
for(inti=0;i<MAXNUM;i++)
cout<<a[i]<<" ";
cout<<endl;
BubbleSort(a,MAXNUM);
cout<<"AfterBubbleSort:"<<endl;
for(inti=0;i<MAXNUM;i++)
cout<<a[i]<<" ";
cin.get();
return0;
}
改进后的算法,在最坏的情况下执行的比较次数与常规冒泡一样,但是最好情况下次数减少为n-1。
相关文章
- 【NLP基础】英文关键词抽取RAKE算法
- C++继承中的多继承语法与菱形继承
- c++ SIMD AVX2比较 例子
- 猴子吃桃 -- C++ 算法
- 银行家算法C++实现
- c++获取子类窗口句柄位置_C++中各种获取窗口句柄的方法「建议收藏」
- C++面向对象程序设计
- C++构造函数的作用_c++什么是构造函数
- C++从入门到精通(第九篇) :多态
- C++动态库和静态库_动态库和静态库调用方法
- C/C++语言常用排序算法
- C++ 中的复数
- C++不知算法系列之集结基础算法思想
- C/C++ 常用排序算法整理
- C++ 子集生成 Subset Generation
- 数据结构小记【Python/C++版】——树与二叉树篇
- C++ 数据结构和算法入门笔记
- C++使用explicit关键词的理解
- 【C++ 语言】vector 容器 ( 容器分类 | vector 声明 | vector 初始化 | vector 容器元素增删查改 )
- C++ stable_sort(STL stable_sort)排序算法详解
- C++ equel_range(STL equal_range)二分查找算法详解
- C++梅森旋转算法生成随机数(mersenne_twister_engine)详解
- C++汉诺塔递归算法完全攻略
- C++ 类成员函数指针语法的友好指南
- C++实现:螺旋矩阵的实例代码
- 基于一致性hash算法C++语言的实现详解
- 海量数据处理系列之:用C++实现Bitmap算法
- C++clock()解析如何使用时钟计时的应用
- C++中用指向数组的指针作函数参数
- 利用C++的基本算法实现十个数排序
- k均值算法c++语言实现代码
- 分享C++面试中string类的一种正确写法
- C++实现调用系统时间简单示例
- VC++实现选择排序算法简单示例
- InlineHook(ring3)的简单C++实现方法