冒泡排序为什么会被看做经典,写入所有C语言的教科书?
冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。
冒泡排序是与插入排序拥有相等的执行时间,但是两种法在需要的交换次数却很大地不同。在最坏的情况,冒泡排序需要O(n2)次交换,而插入排序只要最多O(n)交换。冒泡排序的实现(类似下面)通常会对已经排序好的数列拙劣地执行(O(n2)),而插入排序在这个例子只需要O(n)个运算。因此很多现代的算法教科书避免使用冒泡排序,而用插入排序取代之。冒泡排序如果能在内部循环第一次执行时,使用一个旗标来表示有无需要交换的可能,也有可能把最好的复杂度降低到O(n)。在这个情况,在已经排序好的数列就无交换的需要。若在每次走访数列时,把走访顺序和比较大小反过来,也可以稍微地改进效率。有时候称为往返排序,因为算法会从数列的一端到另一端之间穿梭往返。
它比选择排序更难于理解和解释(就在于它多次无意义的交换的干扰,不信你讲给楼下阿姨比较下),又不具有插入排序的“在线”优点,跟极易理解的基数排序更不能在思维难度上相比,就算同快排,归并相比,也具有复杂度高得多的劣势,但是。
冒泡法思想简单易于描述,只是傻呆呆地每次从前走到后不断比较交换就可以了。对于初学者来说,是学习使用数组极好的练习。用来练习分析算法的效率。在某些情况下其实冒泡法是不二的选择。
谁能讲一下冒泡排序原理?
冒泡排序算法的原理如下:1,比较相邻的元素。如果第一个比第二个大,就交换他们两个。2,对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。3,针对所有的元素重复以上的步骤,除了最后一个。4,持续每次对越来越少的元素重复上面的步骤,直到...
起泡法排序
其实现原理是重复扫描待排序序列,并比较每一对相邻的元素,当该对元素顺序不正确时进行交换。一直重复这个过程,直到没有任何两个相邻元素可以交换,就表明完成了排序。一般情况下,称某个排序算法稳定,指的是当待排序序列中有相同的元素时,它们的相对位置在排序前后不会发生改变。
对N个元素进行排序,用冒泡法进行排序时,共需排几次?
最好情况需比较n-1次,最坏情况需比较(n-1)\/2。冒泡排序基本思想: 冒泡排序,类似于水中冒泡,较大的数沉下去,较小的数慢慢冒起来,假设从小到大,即为较大的数慢慢往后排,较小的数慢慢往前排。直观表达,每一趟遍历,将一个最大的数移到序列末尾。基本步骤:1、外循环是遍历每个元素,每次...
排序有哪些方法
排序的方法有很多种。一、冒泡排序 这是一种简单的排序算法。它重复地遍历待排序的列表,比较每对相邻的项,如果它们的顺序错误就把它们交换过来。这个过程会对每一对相邻项都进行,从开始第一对到最后的最后一对,这样在最后的列表中,最大的数会经过交换被放到最后的位置。二、选择排序 选择排序也是...
局部冒泡排序 我在百度百科“冒泡排序”词条中看到“局部冒泡排序...
局部冒泡排序的基本思想是:对于 N个待排数据组成的序列,在一趟从前向后扫描待排数据序列时,两两比较相邻数据,若反序则对后一个数据作一趟前向的局部冒泡排序,即用冒泡的排序方法把反序对的后一个数据向前排到适合的位置。扫描第一对数据对,若反序,对第2个数据向前冒泡,使前两个数据成为有序...
冒泡排序和交换排序的区别
以JAVA为例,冒泡排序和交换排序的区别是选择排序,每次都要遍历全部元素,选择其中最小的(或最大的)放到第一位;而冒泡排序比较相邻的两个数,大的(或者小的)放后面,由于冒泡是一边比较一边调整顺序,所以数列会越来越接近排序完成状态。Java是由Sun公司于1995年5月推出的面向对象的程序设计语言。J...
冒泡排序法是不是稳定?为什么?
冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。所以,如果两个元素相等,我想你是不会再无聊地把他们俩交换一下的;如果两个相等的元素没有相邻,那么即使通过前面的两两交换把两个相邻起来,这时候也不会交换,所以相同元素的前后顺序并...
O(n2)排序算法的总结
其实不是的,经过多次测试验证,冒泡排序基本上是比选择排序的时间复杂度要差的,这是为什么呢?从源码中我们可以很明显的看出来,虽然冒泡排序是比选择排序执行次数少了,但是交换的次数明显增多了,而如果你对计算机程序指令的实现原理只要有一个基本的认识,就应该知道交换动作比赋值动作是需要更多指令操作...
几种常见的排序(冒泡、选择、插入、希尔、堆排序)
也就是说希尔排序的优势是,能让较小的牌更容易来到数组的前面部分,节约了移动次数。需要注意的是: 由于多次插入排序,我们知道一次插入排序是稳定的,不会改变相同元素的相对顺序,但在不同的插入排序过程中,相同的元素可能在各自的插入排序中移动,最后其稳定性就会被打乱,所以希尔排序是不稳定...
冒泡排序的原理是什么?
冒泡法对10个数由小到大排序:a=rand(1,10);%随机生成一组数 a%未排序前原始数据 n=10;%数组长度 forj=1:n-1 fori=1:n-1 ifa(i)>a(i+1)c=a(i);a(i)=a(i+1);a(i+1)=c;end end end a%排序后数组显示 资料拓展 冒泡法排序原理:例如有一组数为12,23,1,4,2,6。
拔祥华适: 1、冒泡排序 冒泡排序是一个比较简单的排序方法.在待排序的数列基本有序的情况下排序速度较快.若要排序的数有n个,则需要n-1轮排序,第j轮排序中,从第一个数开始,相邻两数比较,若不符合所要求的顺序,则交换两者的位置;直到第...
灵川县18230074330: C语言中有哪些经典的排序方法 - ?
拔祥华适: 有选择排序法和冒泡排序法两种,都是非常经典的排序方法,都是作为一个程序员必须掌握的排序方法. 这两种的区别在比较的逻辑不相同,因此if中的判断条件与for循环中的代码也是不相同的,要根据实际情况选择不同的排序方法.
灵川县18230074330: 冒泡排序法没看懂 - ?
拔祥华适: 我给你说一下冒泡的原理吧:冒泡冒泡,顾名思义,就是往上走的意思.冒泡排序是要依靠两层循环,外层控制次数,内层逐个比较.第一次外层循环将最大(最小)的值放到最上面(数组最后面);第二次外层循环把第二大(小)的值放到从...
灵川县18230074330: C++排序有哪几种最常用,最好用? - ?
拔祥华适: 在C++排序中,最常用、最好用的有 1. 冒泡排序(bubble sort),时间复杂度为O(n^2);2. 鸡尾酒排序(Cocktail sort,双向的冒泡排序),时间复杂度为O(n^2); 3. 快速排序(Quick sort,是对冒泡排序的一种改进),时间复杂度下界为O(...
灵川县18230074330: C++排序的类型?
拔祥华适: 冒泡排序:在最优情况下只需要经过n- 1次比较即可得出结果,(这个最优情况那就是序列己是正序,从100K的正序结果可以看出结果正是如此),但在最坏情况下,即倒序(或一个较小值在最后),下沉算法将需要n(n-1)/2次比较.所以一般...
灵川县18230074330: 什么是冒泡法?[详细的讲下] - ?
拔祥华适: 你说的是冒泡排序把,冒泡排序就是让第一个数和第二个数比较,第一个数再和第三个数进行比较,直到比较到最后一个,根据你所需要的排序是升序还是降序,然后交换,也就是"冒泡"了int temp;for(int i = 0; i < a.length-1; ++i){ /*for中条...
灵川县18230074330: 比较冒泡排序、二叉树排序两种排序法的优劣,如何比?? - ?
拔祥华适: 譬如你定义了一个动态数组a[500].那么它所占内存就是 sizeof(a) 除以1024得到的单位就是KB 其实不应该是看出来的,而应该是算出的.冒泡排序不需要额外的空间(除了交换所需的一个变量),空间复杂度是O(n)[即必须把那些元素存起来〕.而二叉排序树需要新建一棵树.如果一边读入一边插入,需要N个位置.如果先读进来再建树,需要2N.所以其空间复杂度也是O(n)的.不明白的可以Q我:328880142
灵川县18230074330: C语言中冒泡排序和选择排序都有什么优点 那种排序比较好 - ?
拔祥华适: 第一个是冒泡排序 第二个是选择排序 楼主有疑问提出.
灵川县18230074330: 简单介绍一下快速排序的思想? - ?
拔祥华适: 基本思想 快速排序(Quicksort)是对冒泡排序的一种改进.由C. A. R. Hoare在1962年提出.它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这...
灵川县18230074330: java API中所有排序的方法.int - ?
拔祥华适: 最主要的是冒泡排序、选择排序、插入排序以及快速排序 1、冒泡排序 冒泡排序是一个比较简单的排序方法.在待排序的数列基本有序的情况下排序速度较快.若要排序的数有n个,则需要n-1轮排序,第j轮排序中,从第一个数开始,相邻两数...