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

2016-02-19 10:03 4 1 收藏

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

【 tulaoshi.com - 编程语言 】

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

// 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://www.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。

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

来源:https://www.tulaoshi.com/n/20160219/1593165.html

延伸阅读
关于迷宫,有一个引人入胜的希腊神话,这也是为什么现今每当人们提到这个问题,总是兴致勃勃(对于年青人,估计是RPG玩多了),正如虽然九宫图连小学生都能做出来,我们总是自豪的说那叫“洛书”。这个神话我不复述了,有爱好的可以在搜索引擎上输入“希腊神话 迷宫”,就能找到很多的介绍。 迷宫的神话讲述了一位英雄如何靠着“...
3号盘子的目标柱是C,但是已经有了1号盘子,我们最直觉的反映就是——将碍事的盘子搬到另一根柱子上面去。于是,我们要做的是(规律2):保存当前柱的信息(柱子号、应该搬动的最下面一块盘子的号,和它的目标柱),以备当障碍清除后回到现在的柱子继续搬,将当前柱转换为碍事的盘子所在的柱子。假设这样若干步后,我们将7号盘子从A搬到了C,此...
选择排序法SelectionSort(int arr[],int n) template typename T void SelectionSort(T arr[],int n) { int smallIndex;   //表中最小元素的下标 int pass,j;       //用来扫描子表的下标 T temp;         &nb...
栈和队列是操作受限的线性表,似乎每本讲数据结构的数都是这么说的。有些书按照这个思路给出了定义和实现;但是很遗憾,这本书没有这样做,所以,原书中的做法是重复建设,这或许可以用不是一个人写的这样的理由来开脱。 !-- frame contents -- !-- /frame contents -- 顺序表示的栈和队列,必须预先分配空间,并且空...
节点类 #ifndef Node_H #define Node_H template class Type class Node //单链节点类 { public: Type data; NodeType *link; Node() : data(Type()), link(NULL) {} Node(const Type &item) : data(item), link(NULL) {} Node(const Type &item, NodeType *p) : data(ite...

经验教程

349

收藏

13
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部