源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2022-12-22 14:00 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:C++ 冒泡排序数据结构、算法及改进算法
程序代码如下:
[u]复制代码[/u] 代码如下:
// BubbleSort.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <cmath> #include <iostream> using namespace std; #define  MAXNUM 20 template<typename T> void Swap(T& a, T& b) {     int t = a;     a = b;     b = t; } template<typename 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]);     } } template<typename 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; }
但是常规的冒泡,不管相邻的两个元素是否已经排好序,都要冒泡,这就没有必要了,所有我们对这点进行改进。设计一种及时终止的冒泡排序算法: 如果在一次冒泡过程中没有发生元素互换,则说明数组已经按序排列好了,没有必要再继续进行冒泡排序了。代码如下:
[u]复制代码[/u] 代码如下:
// BubbleSort.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <cmath> #include <iostream> using namespace std; #define  MAXNUM 20 template<typename T> void Swap(T& a, T& b) {     int t = a;     a = b;     b = t; } template<typename 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; } template<typename 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。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部