C++ 冒泡排序数据结构、算法及改进算法

馃啒

馃啒

2016-02-19 10:03

图老师小编精心整理的C++ 冒泡排序数据结构、算法及改进算法希望大家喜欢,觉得好的亲们记得收藏起来哦!您的支持就是小编更新的动力~

程序代码如下:
代码如下:

// BubbleSort.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include cmath
#include iostream
using namespace std;
#define  MAXNUM 20
templatetypename T
void Swap(T& a, T& b)
{
    int t = a;
    a = b;
    b = t;
}
templatetypename T
void Bubble(T a[], int n)
{//把数组a[0:n-1]中最大的元素通过冒泡移到右边
    for(int i =0 ;i n-1; i++)
    {
        if(a[i] a[i+1])
            Swap(a[i],a[i+1]);
    }
}
templatetypename T
void BubbleSort(T a[],int n)
{//对数组a[0:n-1]中的n个元素进行冒泡排序
    for(int i = n;i 1; i--)
        Bubble(a,i);
}
int _tmain(int argc, _TCHAR* argv[])
{
    int a[MAXNUM];
    for(int i = 0 ;i MAXNUM; i++)
    {
        a[i] = rand()%(MAXNUM*5);
    }
    for(int i =0; i MAXNUM; i++)
        cout a[i] "  ";
    cout endl;
    BubbleSort(a,MAXNUM);
    cout "After BubbleSort: " endl;
    for(int i =0; i MAXNUM; i++)
        cout a[i] "  ";
    cin.get();
    return 0;
}

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

但是常规的冒泡,不管相邻的两个元素是否已经排好序,都要冒泡,这就没有必要了,所有我们对这点进行改进。设计一种及时终止的冒泡排序算法:

如果在一次冒泡过程中没有发生元素互换,则说明数组已经按序排列好了,没有必要再继续进行冒泡排序了。代码如下:

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

代码如下:

// BubbleSort.cpp : 定义控制台应用程序的入口点。

//
#include "stdafx.h"
#include cmath
#include iostream
using namespace std;
#define  MAXNUM 20
templatetypename T
void Swap(T& a, T& b)
{
    int t = a;
    a = b;
    b = t;
}
templatetypename T
bool Bubble(T a[], int n)
{//把数组a[0:n-1]中最大的元素通过冒泡移到右边
    bool swapped = false;//尚未发生交换
    for(int i =0 ;i n-1; i++)
    {
        if(a[i] a[i+1])
        {
            Swap(a[i],a[i+1]);
            swapped = true;//发生了交换
        }
    }
    return swapped;
}
templatetypename T
void BubbleSort(T a[],int n)
{//对数组a[0:n-1]中的n个元素进行冒泡排序
    for(int i = n;i 1 && Bubble(a,i); i--);
}
int _tmain(int argc, _TCHAR* argv[])
{
    int a[MAXNUM];
    for(int i = 0 ;i MAXNUM; i++)
    {
        a[i] = rand()%(MAXNUM*5);
    }
    for(int i =0; i MAXNUM; i++)
        cout a[i] "  ";
    cout endl;
    BubbleSort(a,MAXNUM);
    cout "After BubbleSort: " endl;
    for(int i =0; i MAXNUM; i++)
        cout a[i] "  ";
    cin.get();
    return 0;
}

改进后的算法,在最坏的情况下执行的比较次数与常规冒泡一样,但是最好情况下次数减少为n-1。

展开更多 50%)
分享

猜你喜欢

C++ 冒泡排序数据结构、算法及改进算法

编程语言 网络编程
C++ 冒泡排序数据结构、算法及改进算法

数据结构算法集---C++语言实现

编程语言 网络编程
数据结构算法集---C++语言实现

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

Linux C 函数参考(数据结构及算法)

Linux Linux命令 Linux安装 Linux编程 Linux桌面 Linux软件 Linux内核 Linux管理
Linux C 函数参考(数据结构及算法)

C++开发中数据结构和算法的分离

编程语言 网络编程
C++开发中数据结构和算法的分离

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

用java实现冒泡排序算法

编程语言 网络编程
用java实现冒泡排序算法

C#几种排序算法

编程语言 网络编程
C#几种排序算法

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Android开发之XML文件解析的使用

Android开发之XML文件解析的使用

超级本有光驱吗

超级本有光驱吗
下拉加载更多内容 ↓