没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
试读
9页
1.冒泡法: 这是最原始,也是众所周知的最慢的算法了。他的名字的由来因为它的工作看来象是冒泡: 代码如下:#include <iostream> void BubbleSort(int* pData,int Count) { int iTemp; for(int i=1;i<Count j=Count-1;j>=i;j–) {if(pData[j]<pData[j-1]) { iTemp = pData[j-1]; pData[j-1] = pData[j]; pData[j] = iTemp;}}} } void main() { int data[]
资源推荐
资源详情
资源评论
C++ 基本算法基本算法 冒泡法、交换法、选择法、实现代码集合冒泡法、交换法、选择法、实现代码集合
1.冒泡法:冒泡法:
这是最原始,也是众所周知的最慢的算法了。
他的名字的由来因为它的工作看来象是冒泡:
代码如下:
#include <iostream.h>
void BubbleSort(int* pData,int Count)
{
int iTemp;
for(int i=1;i<Count;i++) {
for(int j=Count-1;j>=i;j–) {
if(pData[j]<pData[j-1]) {
iTemp = pData[j-1];
pData[j-1] = pData[j];
pData[j] = iTemp;
}
}
}
}
void main() {
int data[] = {10,9,8,7,6,5,4};
BubbleSort(data,7);
for (int i=0;i<7;i++)
cout<<data<<” “;
cout<<“”;
}
倒序(最糟情况)
第一轮:10,9,8,7->10,9,7,8->10,7,9,8->7,10,9,8(交换3次)
第二轮:7,10,9,8->7,10,8,9->7,8,10,9(交换2次)
第一轮:7,8,10,9->7,8,9,10(交换1次)
循环次数:6次交换次数:6次
其他:第一轮:8,10,7,9->8,10,7,9->8,7,10,9->7,8,10,9(交换2次)
第二轮:7,8,10,9->7,8,10,9->7,8,10,9(交换0次)
第一轮:7,8,10,9->7,8,9,10(交换1次) 循环次数:6次交换次数:3次 上面我们给出了程序段,
现在我们分析它:这里,影响我们算法性能的主要部分是循环和交换,显然,次数越多,性能就越差。
从上面的程序我们可以看出循环的次数是固定的,为1+2+…+n-1。写成公式就是1/2*(n-1)*n。
现在注意,我们给出O方法的定义: 若存在一常量K和起点n0,使当n>=n0时,有f(n)<=K*g(n),则f(n) = O(g(n))。
现在我们来看1/2*(n-1)*n,当K=1/2,n0=1,g(n)=n*n时,1/2*(n-1)*n<=1/2*n*n=K*g(n)。所以f(n)=O(g(n))=O(n*n)。
所以我们程序循环的复杂度为O(n*n)。 再看交换。从程序后面所跟的表可以看到,两种情况的循环相同,交换不同。
其实交换本身同数据源的有序程度有极大的关系,当数据处于倒序的情况时,交换次数同循环一样(每次循环判断都会交
换),复杂度为O(n*n)。
当数据为正序,将不会有交换。复杂度为O(0)。乱序时处于中间状态。正是由于这样的原因,我们通常都是通过循环次数来对
比算法。
2.交换法:交换法:
交换法的程序最清晰简单,每次用当前的元素一一的同其后的元素比较并交换。
代码如下:
#include <iostream.h>
void ExchangeSort(int* pData,int Count)
{
int iTemp;
for(int i=0;i<Count-1;i++)
{
for(int j=i+1;j<Count;j++)
{
if(pData[j]<pData)
{
资源评论
weixin_38663516
- 粉丝: 6
- 资源: 932
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功