下面的排方法中,最坏的情况下比较次数最少的是( ) A冒泡排序 B简单选择排序 C直接插入排序 D 堆排序并帮我解释一下为什么原因,分别在最坏的情况下的次数分别是多少啊?

来源:学生作业帮助网 编辑:作业帮 时间:2024/11/27 17:21:57
下面的排方法中,最坏的情况下比较次数最少的是( ) A冒泡排序 B简单选择排序 C直接插入排序 D 堆排序并帮我解释一下为什么原因,分别在最坏的情况下的次数分别是多少啊?
xV[OG++ņ`RIJ[H@rD "Зu\ `;Cڈ]9B*UT/ٙsܾ zsʬQe5.d vW!|BcWi@w촾NkS3*-zQ[Pn'3O%gXC tF6Ch1C%y"a|lKٚ{'d5(fM؍}?6߉{OJk*x =fJjMpωbYBL9'4`bJf6DY,-͒g}H%,vQ `@[eG%Z8*76 _.~ .MMN[X=IҳW]b?WӿΏJ3s ; Hѷ}}\d~4$yC"MĔy%Zt- ,7V#vD\ڧRFp%{~i?!v{55#͵Jǐ&NbV^}jw612ZidҺvpb<8@c6: z%ے@ SoRv!qڅ 7ØbYF4 Ru#ڱU '+s|!Vʻ=帘G+`3A`OnC EL1 ӹOwf،ٵ(ˠ12ax\_NA!.rk\w͸RK~p{@I =D[EeyTMu>#-` z6jֹIMaA Ci*N V<60#)mYL.$m+٨vKڠCů |;x޻Vl uW+v4OAN6 Uui [rw| i8|`MŻ+NWWek'T-iF) $@b8M$xĵ]m 2܆z{%zq8L*'ay_)}!Zuiƒ|#H?cq|%oM켂p}Tr 6pRX;gܟw6=κ'` N7_yŝ

下面的排方法中,最坏的情况下比较次数最少的是( ) A冒泡排序 B简单选择排序 C直接插入排序 D 堆排序并帮我解释一下为什么原因,分别在最坏的情况下的次数分别是多少啊?
下面的排方法中,最坏的情况下比较次数最少的是( ) A冒泡排序 B简单选择排序 C直接插入排序 D 堆排序
并帮我解释一下为什么原因,分别在最坏的情况下的次数分别是多少啊?

下面的排方法中,最坏的情况下比较次数最少的是( ) A冒泡排序 B简单选择排序 C直接插入排序 D 堆排序并帮我解释一下为什么原因,分别在最坏的情况下的次数分别是多少啊?
从原理上给你推导下:
1.冒泡法:这是最原始,也是众所周知的最慢的算法了.他的名字的由来因为它的工作看来象是冒泡:#include void BubbleSort(int* pData,int Count) { int iTemp; for(int i=1;i =i;j--) { if(pData[j] 7,8,10,9(交换2次) 第一轮:7,8,10,9->7,8,9,10(交换1次) 循环次数:6次 交换次数:6次 其他:第一轮:8,10,7,9->8,10,7,9->8,7,10,9->7,8,10,9(交换2次) 第二轮:7,8,10,9->7,8,10,9->7,8,10,9(交换0次) 第一轮:7,8,10,9->7,8,9,10(交换1次) 循环次数:6次 交换次数:3次 上面我们给出了程序段,现在我们分析它:这里,影响我们算法性能的主要部分是循环和交换,显然,次数越多,性能就越差.从上面的程序我们可以看出循环的次数是固定的,为1+2+...+n-1.写成公式就是1/2*(n-1)*n.现在注意,我们给出O方法的定义:若存在一常量K和起点n0,使当n>=n0时,有f(n) 7,10,8,9(交换1次) 第二轮:7,10,8,9->7,8,10,9->7,8,10,9(交换1次) 第一轮:7,8,10,9->7,8,9,10(交换1次) 循环次数:6次 交换次数:3次 从运行的表格来看,交换几乎和冒泡一样糟.事实确实如此.循环次数和冒泡一样 也是1/2*(n-1)*n,所以算法的复杂度仍然是O(n*n).由于我们无法给出所有的情况,所以 只能直接告诉大家他们在交换上面也是一样的糟糕(在某些情况下稍好,在某些情况下稍差).3.选择法:现在我们终于可以看到一点希望:选择法,这种方法提高了一点性能(某些情况下) 这种方法类似我们人为的排序习惯:从数据中选择最小的同第一个值交换,在从省下的部分中 选择最小的与第二个交换,这样往复下去.#include void SelectSort(int* pData,int Count) { int iTemp; int iPos; for(int i=0;i (iTemp=8)8,10,7,9->(iTemp=7)8,10,7,9->(iTemp=7)7,10,8,9(交换1次) 第二轮:7,10,8,9->(iTemp=8)7,10,8,9->(iTemp=8)7,8,10,9(交换1次) 第一轮:7,8,10,9->(iTemp=9)7,8,9,10(交换1次) 循环次数:6次 交换次数:3次 遗憾的是算法需要的循环次数依然是1/2*(n-1)*n.所以算法复杂度为O(n*n).我们来看他的交换.由于每次外层循环只产生一次交换(只有一个最小值).所以f(n) 7,8,9,10(交换1次)(循环1次) 循环次数:4次 交换次数:2次 上面结尾的行为分析事实上造成了一种假象,让我们认为这种算法是简单算法中最好的,其实不是,因为其循环次数虽然并不固定,我们仍可以使用O方法.从上面的结果可以看出,循环的次数f(n)