/*** 改进冒泡排序的两个做法 冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。 由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。 ***/ 现在让我们来提升算法的效率: 首先来看一个例子: 41 67 34 0 69 24 78 58 62 64 第一趟排序为 41 34 0 67 24 69 58 62 64 78 第二趟排序为 34 0 41 24 67 58 62 64 69 78 第三趟排序为 0 34 24 41 58 62 64 67 69 78 第四趟排序为 0 24 34 41 58 62 64 67 69 78 每趟排序的结果是最大数移动到最后一个位置: (1)根据此结果我们每次比较之后都可以为下一次减少一次比较,因为最大数已经沉底,所以最后一位就不用比较了。 因此在内层循环中我们每次都可以减少一次循环。 (2)根据冒泡排序的思想本来按道理是要比较 n-1趟的 上诉的例子为9趟。但是在第四趟中就已经排序完成。如果在继续 下去就等于做无用功了,因此我们可以再第四趟排序中就可以退出循环了,所以我们可以增加一个变量 bool flags=true; 将其初始化为true,当发生数据的交换时候就赋予false值。如果在本趟排序中就没有发生一次交换则就在外层循环中跳出去。 一个完整的例子: ////////////////////////////// ///////sort .h file template<typename type> void Swap(type &p,type &q) { type temp=p; p=q; q=temp; } //由小到大进行排序 template<typename type> void bubbling_sort(type a[],int n) { int i,j; bool flags=true; for( i=0; i < n-1; i++ ) { for( j=0; j < n-1-i; j++ ) { if( a[j] > a[j+1] ) { Swap(a[j],a[j+1]); flags=false; } } if( flags ) break; else flags=true; } } //////////////////////////////////////////// //////main.cpp file #include <cstdlib> #include <iostream> #include "sort.h" using namespace std; int main(int argc, char *argv[]) { int a[10]; int n; cout<<"排序前"<<endl; for( int i=0;i<10;i++ ) { n=rand()%100; a[i]=n; cout<<a[i]<<" "; } cout<<endl; cout<<"排序后"<<endl; bubbling_sort(a,10); for( int j=0;j<10;j++ ) cout<<a[j]<<" "; cout<<endl; cout << "Press the enter key to continue ..."; cin.get(); return EXIT_SUCCESS; }
更多内容 请参考我的个人博客 http://ismartstudio.com/
相关推荐
2改进的冒泡排序,在一次冒泡的过程中,如果没有发生交换,则已经有序 3进一步改进的冒泡排序,如果在某次冒泡过程中,最后一次进行交换的位置为flag,则表示flag之后的序列已经有序,那么下一次冒泡就无需比较flag...
冒泡排序法改进前后的比较,比较了其优点及缺点
冒泡排序的改进,在里层循环中,追踪最后一次比较,避免不必要的比较,算法课后题
python 实现一种改进的冒泡排序,简单选择排序的方法。
有一个模板类写出了快速排序,冒泡排序,插入排序,选择排序四种算法。用的是C++哦
冒泡排序-冒泡排序法的改进 比如用冒泡排序将4、5、7、1、2、3这6个数排序。在该列中,第二趟排序结束后,数组已排好序,但计算机此时并不知道已经反排好序,计算机还需要进行一趟比较,如果这一趟比较,未发生...
改进的冒泡排序,对排序的数组进行双向冒泡排序,又称为鸡尾酒排序
冒泡排序的算法分析与改进.txt 冒泡排序的算法分析与改进.txt
排序是算法的最基本入门,冒泡排序是最简单的一个算法,但是经典的算法却存在累赘冒泡,设置标志变量,可以提高算法效率
冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至...
冒泡排序及其改进算法的分析与比较,曾希君,,冒泡排序算法是大家最为熟悉的排序算法之一,传统的冒泡排序算法过程很简单,并广泛应用于现在的教学及科研中,传统冒泡排序算法
改进冒泡排序法.asm
冒泡排序和选择排序均用两种方法实现,原始方法和在原始方法上的改进和优化,对应博客地址:http://blog.csdn.net/ns_code/article/details/20065107
冒泡算法的改进思想: 1.记录从第0下标开始一直递增的最后一个数的下标start,在以后的每趟排序中都是从start下标...3.数组的长度n在每趟排序后都会n--; 4.同时当end时标明数组中没有可以交换的元素了,则排序完成
冒泡排序的分析改进算法,杨义磊,,排序算法对于计算机信息处理很重要 ,一个好的排序不仅可以使信息查找的效率提高 ,而且还直接影响着计算机的工作效率。目前排序领��
传统的冒泡排序法是这样操作:从前往后,依次比较两个相邻的元素,如果逆序则交换这两个元素值,然后继续往后操作;到了数据尾部时,就找出了一个最大值(或最小值)。然后重复上面的操作n-1次(n为元素个数)。相关...
C语言-改进版的冒泡排序(双向冒泡)
冒泡排序和改进的冒泡排序 /*------------------------------------------------------------------------------------------- Bubble_sort.h 冒泡排序: 时间复杂度为O(N^2) 改进的冒泡排序: 时间复杂度仍为O(N^2...
参考该文件,可以对一些排序算法做一些比较,帮组自己在学习数据结构的过程中进一步提高。