• 关于

    冒泡排序

    的搜索结果

回答

待排序的元素规模小:用冒泡排序。规模大一般用快速排序,堆排序。冒泡排序。从空间复杂度和时间复杂度来说冒泡排序算法并不是最好的排序方法。但是冒泡排序有一些优点:冒泡法有一个很形象的名字,冒泡法排序是一种就地排序,冒泡排序还是一种稳定的排序(冲突间相对位置不变)。冒泡法主要应用于教学。

游客886 2019-12-02 01:19:26 0 浏览量 回答数 0

问题

冒泡排序法在什么场合下有用?笔试的时候应该写冒泡排序还是快速排序?

知与谁同 2019-12-01 20:11:27 412 浏览量 回答数 1

回答

  冒泡,选择,希尔...等排序算法是前辈们总结出来的经典排序算法,它们各有自己的优缺点,适合不同情况下使用。比如冒泡排序实现起来简单,如果待排序数据量小,并且对效率要求不高时,完全可以满足;希尔排序效率比冒泡高,但是算法实现稍复杂,一般人们不愿意去实现它。 我认为排序算法的根本区别是它们排序的效率,就是排序消耗的时间和空间。你如果要比较冒泡排序和选择排序的区别,就去分析它们排序时分别占用的时间和空间。老实说,这些内容算法书都有讲解,但是我从来没有认真去研究分析过,也没有真的去计算过一个算法的效率值。如果那位对这方面熟悉,不妨帮 @飞行苏 计算下。 不过根据对算法的理解,冒泡排序的效率不会大于选择排序

聚小编 2019-12-02 01:18:26 0 浏览量 回答数 0

阿里云试用中心,为您提供0门槛上云实践机会!

0元试用32+款产品,最高免费12个月!拨打95187-1,咨询专业上云建议!

回答

1、插入排序(直接插入排序和希尔排序) 2、选择排序(直接选择排序和堆排序) 3、交换排序(冒泡排序和快速排序) 4、归并排序 5、基数排序 直接插入排序:逐个将后一个数加到前面的排好的序中。在直接插入排序过程中,对其中一个记录的插入排序称为一次排序;直接插入排序是从第二个记录开始进行的,因此,长度为n的记录序列需要进行n-1次排序才能完成整个序列的排序。时间复杂度为O(n2)。 希尔排序:希尔排序又称缩小增量排序,增量di可以有各种不同的取法,但最后一次排序时的增量必须为1,最简单可取di+1=di/2(取小)。时间复杂度为O(n(log2n)2)。 直接选择排序 说明:每次将后面的最小的找出来插入前面的已排好的序中。同理,具有n个记录的序列要做n-1次排序。 时间复杂度为O(n2)。 冒泡排序:两个两个比较,将大的往后移。通过第一次冒泡排序,使得待排序的n个记录中关键字最大的记录排到了序列的最后一个位置上。然后对序列中前n-1个记录进行第二次冒泡排序。。。对于n个记录的序列,共需进行n次冒泡排序。时间复杂度为O(n2)。 快速排序:又叫分区交换排序,是对冒泡排序方法的一种改进。时间复杂度为O(nlog2n)。 归并排序:将两个或两个以上的有序数据序列合并成一个有序数据序列的过程。时间复杂度为O(nlog2n)。

寒凝雪 2019-12-02 01:17:58 0 浏览量 回答数 0

回答

1.稳定性比较 插入排序、冒泡排序、二叉树排序、二路归并排序及其他线形排序是稳定的 选择排序、希尔排序、快速排序、堆排序是不稳定的 2.时间复杂性比较 插入排序、冒泡排序、选择排序的时间复杂性为O(n2) 其它非线形排序的时间复杂性为O(nlog2n) 线形排序的时间复杂性为O(n); 3.辅助空间的比较 线形排序、二路归并排序的辅助空间为O(n),其它排序的辅助空间为O(1); 4.其它比较 插入、冒泡排序的速度较慢,但参加排序的序列局部或整体有序时,这种排序能达到较快的速度。 反而在这种情况下,快速排序反而慢了。 当n较小时,对稳定性不作要求时宜用选择排序,对稳定性有要求时宜用插入或冒泡排序。 若待排序的记录的关键字在一个明显有限范围内时,且空间允许是用桶排序。 当n较大时,关键字元素比较随机,对稳定性没要求宜用快速排序。 当n较大时,关键字元素可能出现本身是有序的,对稳定性有要求时,空间允许的情况下。 宜用归并排序。 当n较大时,关键字元素可能出现本身是有序的,对稳定性没有要求时宜用堆排序。

一键天涯 2019-12-02 01:17:46 0 浏览量 回答数 0

回答

H5edu教育Html5开发为您解答: 1.稳定性比较 插入排序、冒泡排序、二叉树排序、二路归并排序及其他线形排序是稳定的 选择排序、希尔排序、快速排序、堆排序是不稳定的 2.时间复杂性比较 插入排序、冒泡排序、选择排序的时间复杂性为O(n2) 其它非线形排序的时间复杂性为O(nlog2n) 线形排序的时间复杂性为O(n); 3.辅助空间的比较 线形排序、二路归并排序的辅助空间为O(n),其它排序的辅助空间为O(1); 4.其它比较 插入、冒泡排序的速度较慢,但参加排序的序列局部或整体有序时,这种排序能达到较快的速度。 反而在这种情况下,快速排序反而慢了。 当n较小时,对稳定性不作要求时宜用选择排序,对稳定性有要求时宜用插入或冒泡排序。 若待排序的记录的关键字在一个明显有限范围内时,且空间允许是用桶排序。 当n较大时,关键字元素比较随机,对稳定性没要求宜用快速排序。 当n较大时,关键字元素可能出现本身是有序的,对稳定性有要求时,空间允许的情况下。 宜用归并排序。 当n较大时,关键字元素可能出现本身是有序的,对稳定性没有要求时宜用堆排序。

玄学酱 2019-12-02 01:17:33 0 浏览量 回答数 0

问题

在冒泡排序,希尔排序,基数排序,归并排序四种排序算法中不稳定的排序算法是

知与谁同 2019-12-01 20:11:13 435 浏览量 回答数 3

回答

main() { int i,j,temp; int a[10]; for(i=0;i<10;i++) scanf ("%d,",&a[i]); for(j=0;j<=9;j++) { for (i=0;i<10-j;i++) if (a[i]>a[i+1]) { temp=a[i]; a[i]=a[i+1]; a[i+1]=temp;} } for(i=1;i<11;i++) printf("%5d,",a[i] ); printf("\n"); } -------------- 冒泡算法 冒泡排序的算法分析与改进 交换排序的基本思想是:两两比较待排序记录的关键字,发现两个记录的次序相反时即进行交换,直到没有反序的记录为止。 应用交换排序基本思想的主要排序方法有:冒泡排序和快速排序。 冒泡排序 1、排序方法 将被排序的记录数组R[1..n]垂直排列,每个记录R看作是重量为R.key的气泡。根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R:凡扫描到违反本原则的轻气泡,就使其向上"飘浮"。如此反复进行,直到最后任何两个气泡都是轻者在上,重者在下为止。 (1)初始 R[1..n]为无序区。 (2)第一趟扫描 从无序区底部向上依次比较相邻的两个气泡的重量,若发现轻者在下、重者在上,则交换二者的位置。即依次比较(R[n],R[n-1]),(R[n-1],R[n-2]),…,(R[2],R[1]);对于每对气泡(R[j+1],R[j]),若R[j+1].key<R[j].key,则交换R[j+1]和R[j]的内容。 第一趟扫描完毕时,"最轻"的气泡就飘浮到该区间的顶部,即关键字最小的记录被放在最高位置R[1]上。 (3)第二趟扫描 扫描R[2..n]。扫描完毕时,"次轻"的气泡飘浮到R[2]的位置上…… 最后,经过n-1 趟扫描可得到有序区R[1..n] 注意: 第i趟扫描时,R[1..i-1]和R[i..n]分别为当前的有序区和无序区。扫描仍是从无序区底部向上直至该区顶部。扫描完毕时,该区中最轻气泡飘浮到顶部位置R上,结果是R[1..i]变为新的有序区。 2、冒泡排序过程示例 对关键字序列为49 38 65 97 76 13 27 49的文件进行冒泡排序的过程 3、排序算法 (1)分析 因为每一趟排序都使有序区增加了一个气泡,在经过n-1趟排序之后,有序区中就有n-1个气泡,而无序区中气泡的重量总是大于等于有序区中气泡的重量,所以整个冒泡排序过程至多需要进行n-1趟排序。 若在某一趟排序中未发现气泡位置的交换,则说明待排序的无序区中所有气泡均满足轻者在上,重者在下的原则,因此,冒泡排序过程可在此趟排序后终止。为此,在下面给出的算法中,引入一个布尔量exchange,在每趟排序开始前,先将其置为FALSE。若排序过程中发生了交换,则将其置为TRUE。各趟排序结束时检查exchange,若未曾发生过交换则终止算法,不再进行下一趟排序。 (2)具体算法 void BubbleSort(SeqList R) { //R(l..n)是待排序的文件,采用自下向上扫描,对R做冒泡排序 int i,j; Boolean exchange; //交换标志 for(i=1;i<n;i++){ //最多做n-1趟排序 exchange=FALSE; //本趟排序开始前,交换标志应为假 for(j=n-1;j>=i;j--) //对当前无序区R[i..n]自下向上扫描 if(R[j+1].key<R[j].key){//交换记录 R[0]=R[j+1]; //R[0]不是哨兵,仅做暂存单元 R[j+1]=R[j]; R[j]=R[0]; exchange=TRUE; //发生了交换,故将交换标志置为真 } if(!exchange) //本趟排序未发生交换,提前终止算法 return; } //endfor(外循环) } //BubbleSort 4、算法分析 (1)算法的最好时间复杂度 若文件的初始状态是正序的,一趟扫描即可完成排序。所需的关键字比较次数C和记录移动次数M均达到最小值: Cmin=n-1 Mmin=0。 冒泡排序最好的时间复杂度为O(n)。 (2)算法的最坏时间复杂度 若初始文件是反序的,需要进行n-1趟排序。每趟排序要进行n-i次关键字的比较(1≤i≤n-1),且每次比较都必须移动记录三次来达到交换记录位置。在这种情况下,比较和移动次数均达到最大值: Cmax=n(n-1)/2=O(n2) Mmax=3n(n-1)/2=O(n2) 冒泡排序的最坏时间复杂度为O(n2)。 (3)算法的平均时间复杂度为O(n2) 虽然冒泡排序不一定要进行n-1趟,但由于它的记录移动次数较多,故平均时间性能比直接插入排序要差得多。 (4)算法稳定性 冒泡排序是就地排序,且它是稳定的。 5、算法改进 上述的冒泡排序还可做如下的改进: (1)记住最后一次交换发生位置lastExchange的冒泡排序 在每趟扫描中,记住最后一次交换发生的位置lastExchange,(该位置之前的相邻记录均已有序)。下一趟排序开始时,R[1..lastExchange-1]是有序区,R[lastExchange..n]是无序区。这样,一趟排序可能使当前有序区扩充多个记录,从而减少排序的趟数。具体算法【参见习题】。 (2) 改变扫描方向的冒泡排序 ①冒泡排序的不对称性 能一趟扫描完成排序的情况: 只有最轻的气泡位于R[n]的位置,其余的气泡均已排好序,那么也只需一趟扫描就可以完成排序。 【例】对初始关键字序列12,18,42,44,45,67,94,10就仅需一趟扫描。 需要n-1趟扫描完成排序情况: 当只有最重的气泡位于R[1]的位置,其余的气泡均已排好序时,则仍需做n-1趟扫描才能完成排序。 【例】对初始关键字序列:94,10,12,18,42,44,45,67就需七趟扫描。 ②造成不对称性的原因 每趟扫描仅能使最重气泡"下沉"一个位置,因此使位于顶端的最重气泡下沉到底部时,需做n-1趟扫描。 ③改进不对称性的方法 在排序过程中交替改变扫描方向,可改进不对称性

沉默术士 2019-12-02 01:19:30 0 浏览量 回答数 0

问题

下列排序算法中不稳定的是( )。 A. 快速排序 B. 归并排序 C. 冒泡排序 D. 直接插入排序

知与谁同 2019-12-01 20:12:07 666 浏览量 回答数 2

回答

冒泡排序,在每一次比较的时候,如果发现相邻两数的次序不对,都会马上就把两数进行对调。 选择排序,则在比较过程中(内循环里面)并不进行对调,而是先记录下最小(大)数的下标,在一次扫描完成后再进行对调。所以它的效率会比冒泡的高一点。 但是冒泡排序是“稳定的”排序。就是说同样总分的若干名同学,排序前在前面的,排序后这些同学的相互位置不会发生改变。 而选择排序则是“不稳定的”排序。就是说同样总分的若干名同学,排序前原来相对排在前面的,排序后有可能会变到后面。

管理贝贝 2019-12-02 01:19:23 0 浏览量 回答数 0

问题

c++编程用函数模板实现排序算法(冒泡排序、插入排序)

知与谁同 2019-12-01 20:10:55 659 浏览量 回答数 3

回答

基础排序: 冒泡排序 选择排序 插入排序(这个虽然从算法上来讲,时间复杂度一样,但是一般比上面两个快一点) 比较推荐的排序 希尔排序(基于插入排序) 快速排序(基于冒泡排序) 还有一个  归并排序  了解一下就好。

寒凝雪 2019-12-02 01:19:03 0 浏览量 回答数 0

回答

冒泡排序的时间复杂度是O(n*n),应该算是所有排序算法中最慢的,不过是最简单易懂也是最稳定的,我个人通常用快速排序,虽然说它的稳定性差,但是目前为止还真没遇见过快速排序莫名其妙的崩溃事件。 提供一个实验数据,P8700 CPU 2.53GHz,指定长度double数组,最坏情况下(数据从大到小排列)进行冒泡排序和快速排序耗时:数组长度 冒泡排序(毫秒) 快速排序(毫秒) 196 <1 <1 197 15 <1 1000 125 <110000 12870 1530000 117999 47

聚小编 2019-12-02 01:19:26 0 浏览量 回答数 0

问题

对学生成绩从高到低进行排序 选择冒泡排序或选择排序法 最后提交一个c文件

知与谁同 2019-12-01 20:11:13 603 浏览量 回答数 1

回答

排序技术:1交换类排序法 2差入排序法 3选择类排序法。 1交换类排序法:借助数据元素之间的互相交换进行排序的一种方法。 2插入排序法:将无序序列中的各元素依次插入到已经有序的线性表中。 3暂无。(有待继续查找) 交换类排序法:1冒泡排序 2快速排序 1冒泡排序:假设线性表长度为n,在最坏的情况下,冒泡排序需要经过n/2遍的从前到后的扫描和n/2遍的从后往前的扫描,需要比较的次数为n(n-1)/2 2快速排序:从线性表中选取一个元素,设为T,将线性表后面小于T的元素移到前 面,而前面大于T的移到后面,结果就将线性表分成两部分,T插入到分界线的位置处,将子表再按上述原则进行分割,一直做下去,直到所有的子表为空为止。 插入排序法:1简单插入排序法 2希尔排序法 1 选择排序法:1简单选择排序 2堆排序

马铭芳 2019-12-02 01:19:27 0 浏览量 回答数 0

回答

冒泡排序的基本思想是: 通过无序区中相邻记录关键字间的比较和位置的交换,使关键字最小的记录如气泡一般逐渐往上“漂浮”直至“水面”。整个算法是从最下面的记录开始,对每两个相邻的关键字进行比较,且使关键字较小的记录换至关键字较大的记录之上,使得经过一趟冒泡排序后,关键字最小的记录到达最上端,接着,再在剩下的记录中找关键字次小的记录,并把它换在第二个位置上。依次类推,一直到所有记录都有序为止。 基本思想是:在待排序的n个记录中任取一个记录(通常取第一个记录),把该记录放入适当位置后,数据序列被此记录划分成两部分。所有关键字比该记录关键字小的记录放置在前一部分,所有比它大的记录放置在后一部分,并把该记录排在这两部分的中间(称为该记录归位),这个过程称作一趟快速排序。 冒泡排序的时间复杂度平均来说为n*n (n为待排序的元素个数) 快速排序的平均时间复杂度为n*㏒2 n(n* log以2为底n的对数) 所以,总的来说,快速排序的效率要由于冒泡,尤其是n非常大。 如果你还是不太明白,给个邮箱,我发个swf给你,上面有冒泡和快速排序的演示。

祁同伟 2019-12-02 01:18:02 0 浏览量 回答数 0

问题

冒泡排序与选择排序有什么区别

知与谁同 2019-12-01 20:11:21 457 浏览量 回答数 3

问题

怎么使用冒泡排序法进行排序?

知与谁同 2019-12-01 20:11:31 496 浏览量 回答数 1

回答

冒泡排序的算法时间复杂度上O(n^2 ) 冒泡排序是这样实现的: 首先将所有待排序的数字放入工作列表中。 从列表的第一个数字到倒数第二个数字,逐个检查:若某一位上的数字大于他的下一位,则将它与它的下一位交换。 重复2号步骤,直至再也不能交换。 冒泡排序的平均时间复杂度与插入排序相同,也是平方级的,但也是非常容易实现的算法。

玄学酱 2019-12-02 01:17:46 0 浏览量 回答数 0

问题

什么是冒泡排序和快速排序?两者之间的区别是什么?编程时哪一种排序方法比较好?

知与谁同 2019-12-01 20:11:05 869 浏览量 回答数 1

问题

选择排序法跟冒泡排序法有什么区别

知与谁同 2019-12-01 20:11:13 950 浏览量 回答数 1

回答

冒泡:在冒泡排序中,可以设置一个判断,若某一趟排序没发生交换则可以终止排序。其他的都不行,尽管快速排序也是交换排序。

祁同伟 2019-12-02 01:18:01 0 浏览量 回答数 0

回答

package temp; import sun.misc.Sort; /** * @author zengjl * @version 1.0 * @since 2007-08-22 * @Des java几种基本排序方法 */ /** * SortUtil:排序方法 * 关于对排序方法的选择:这告诉我们,什么时候用什么排序最好。当人们渴望先知道排在前面的是谁时, * 我们用选择排序;当我们不断拿到新的数并想保持已有的数始终有序时,我们用插入排序;当给出的数 * 列已经比较有序,只需要小幅度的调整一下时,我们用冒泡排序。 */ public class SortUtil extends Sort { /** * 插入排序法 * @param data * @Des 插入排序(Insertion Sort)是,每次从数列中取一个还没有取出过的数,并按照大小关系插入到已经取出的数中使得已经取出的数仍然有序。 */ public int[] insertSort(int[] data) { 1/11页 int temp; for (int i = 1; i < data.length; i++) { for (int j = i; (j > 0) && (data[j] < data[j - 1]); j--) { swap(data, j, j - 1); } } return data; } /** * 冒泡排序法 * @param data * @return * @Des 冒泡排序(Bubble Sort)分为若干趟进行,每一趟排序从前往后比较每两个相邻的元素的大小(因此一趟排序要比较n-1对位置相邻的数)并在 * 每次发现前面的那个数比紧接它后的数大时交换位置;进行足够多趟直到某一趟跑完后发现这一趟没有进行任何交换操作(最坏情况下要跑n-1趟, * 这种情况在最小的数位于给定数列的最后面时发生)。事实上,在第一趟冒泡结束后,最后面那个数肯定是最大的了,于是第二次只需要对前面n-1 * 个数排序,这又将把这n-1个数中最小的数放到整个数列的倒数第二个位置。这样下去,冒泡排序第i趟结束后后面i个数都已经到位了,第i+1趟实 * 际上只考虑前n-i个数(需要的比较次数比前面所说的n-1要小)。这相当于用数学归纳法证明了冒泡排序的正确性

游客886 2019-12-02 01:17:49 0 浏览量 回答数 0

回答

  日常操作中,常见的排序方法有:冒泡排序、快速排序、选择排序、插入排序、希尔排序,甚至还有基数排序、鸡尾酒排序、桶排序、鸽巢排序、归并排序等。 各类排序方法代码如图: -------------------------http://baike.baidu.com/view/297739.htm 去这儿看,很全的。 其实正常知道 插入排序,冒泡排序,选择排序,快速排序 就基本够了。

游客886 2019-12-02 01:17:41 0 浏览量 回答数 0

问题

什么是冒泡排序法,什么是直接排序法

知与谁同 2019-12-01 20:10:51 323 浏览量 回答数 1

问题

用冒泡排序法对十个数进行排序 C语言

知与谁同 2019-12-01 20:11:21 496 浏览量 回答数 2

回答

冒泡排序的算法时间复杂度上 最坏情况下 是:O(n^2 ) 冒泡排序是这样实现的: 首先将所有待排序的数字放入工作列表中。 从列表的第一个数字到倒数第二个数字,逐个检查:若某一位上的数字大于他的下一位,则将它与它的下一位交换。 重复2号步骤,直至再也不能交换。 冒泡排序的平均时间复杂度与插入排序相同,也是平方级的,但也是非常容易实现的算法。

马铭芳 2019-12-02 01:18:23 0 浏览量 回答数 0

回答

(1)交换类排序法交换类排序法是指借助数据元素之间的互相交换进行排序的一种方法。冒泡排序法与快速排序法都属于交换类排序方法。冒泡排序法是一种最简单的交换类排序方法,它是通过相邻数据元素的交换逐步将线性表变成有序。假设线性表的长度为n,则在最坏情况下,冒泡排序需要经过n/2遍的从前往后的扫描和n/2遍的从后往前的扫描,需要的比较次数为n(n–1)/2。但这个工作量不是必需的,一般情况下要小于这个工作量。快速排序法也是一种交换类的排序方法,但由于它比冒泡排序法的速度快,因此称之为快速排序法。其关键是对线性表进行分割,以及对各分割出的子表再进行分割。(2)插入类排序法插入类排序法主要有简单插入排序法和希尔排序法。简单插入排序法,是指将无序序列中的各元素依次插入到已经有序的线性表中。在这种排序方法中,每一次比较后最多移掉一个逆序,因此,这种排序方法的效率与冒泡排序法相同。在最坏情况下,简单插入排序需要n(n–1)/2次比较。希尔排序法对简单插入排序做了较大的改进。它是将整个无序序列分割成若干小的子序列分别进行插入排序。希尔排序的效率与所选取的增量序列有关。在最坏情况下,希尔排序所需要的比较次数为O(n1.5)。(3)选择类排序选择类排序主要有简单选择类排序法和堆排序法。简单选择排序法的基本思想是:扫描整个线性表,从中选出最小的元素,将它交换到表的最前面(这是它应有的位置);然后对剩下的子表采用同样的方法,直到子表空为止。对于长度为n的线性表,在最坏情况下需要比较n(n–1)/2次。堆排序法也属于选择类排序法。具有n个元素的序列(h1, h2, …, hn),当且仅当满足条件: 或 (i=1, 2, …, n/2)时称之为堆。可见,堆顶元素(即第一个元素)必为最大项。堆排序的方法对于规模较小的线性表并不适合,但对于较大规模的线性表来说是很有效的。在最坏情况下,堆排序需要比较的次数为O(nlog2n)。 如果帮助到您,请记得采纳为满意答案哈,谢谢。祝您生活愉快。 vae.la

晚来风急 2019-12-02 01:19:10 0 浏览量 回答数 0

问题

求 c语言选择排序法和 冒泡排序法代码!

知与谁同 2019-12-01 20:10:41 791 浏览量 回答数 6

问题

C语言中选择排序法和冒泡排序法代码。

知与谁同 2019-12-01 20:10:42 1561 浏览量 回答数 1
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 企业信息查询 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 2020阿里巴巴研发效能峰会 企业建站模板 云效成长地图 高端建站