C语言 冒泡排序法和选择法的不同,本质区别

不必写算法,讲清楚就行了,谢谢!还有思路上的不同哦... 不必写算法,讲清楚就行了,谢谢!
还有思路上的不同哦
展开
 我来答
匿名用户
2012-04-19
展开全部
先搬书说说书上标准的说法吧,选择排序基本思想是每一趟在n个记录中选取关键字最小的记录作为有序序列的第I个记录,并且令I为1~n-1,进行n-1趟选择操作。用我的话来说(把数从小到大排列)就是把数组中的第一个数和第二个数比较,若第一个数大于第二个数,则把两个数的位置交换,然后现在这个位置的第二个数和第三个数比较;若第一个数小于第二个数的话,两个数的位置不变,接着将第一个数和第三个数进行比较大小。全部以此类推直到第一个数和后面所有的数进行比较,然后再把数组中原来的第二个数做这个比较,一直到数组的所有数全部遍历一次。
冒泡排序,首先泾第一个记录的关键字和第二个记录的关键字进行比较,若为逆序则将两个记录交换,然后比较第二个和第三个记录的关键字,以此类推,知道第n-1个记录和第n个记录的关键字进行过比较为止。用我的话来说就是把最先前的那个数和第二个数比较,若前面比后面小,则第二个数和第三个数进行比较,一直到遍历一次数组中所有的元素;若前面的比后面的大,则两个交换位置,然后用现在第二个数和第三个数进行比较,一直到遍历一次数组中所有的元素。

估计有点昏了。那就简单点。选择就是原来的第一个元素和后面的所有元素进行一次比较后再用原来的第二个元素和除原来第一个元素以外的所有元素进行一次比较。冒泡就是相邻的两个元素进行比较,一直到遍历一次数组所有元素才结束、。 也可以这样想,选择排序就是每一次遍历数组的时候都将数组元素最大或者最小的元素按数组下标的顺序放入数组,然后比较这个元素后面的元素,然后再放入元素。冒泡排序可以看作是相邻的两个元素进行比较,小的放在前面,大的放在后面(谁放在前面看你的需求)。
追问
谢谢你的热心帮助.我还是不太懂,希望你能耐心看下我的理解对不对哈(都按从小到大排):选择,第1趟比较选出最小的数放第1位,然后在剩下的数中选出最小的放第2位,再在剩下的数中选出最小的数放第3位... ;冒泡,第1趟,相邻两个数比较,先从第1个和第2个数开比,若第2个数大的话就不换位置了,然后是第2个数和第3个数比较,直到把最大的数放到最后面去,然后第2趟重复第1趟选出次大的数放倒数第2位,直到排好为止.是不是这样的?谢谢!
追答
选择是对的。冒泡还是放在最前面,其实和选择最明显的区别就是冒泡是相邻的比较,而不像选择可以和不相邻的比较。
fayfog
推荐于2016-11-19 · TA获得超过323个赞
知道小有建树答主
回答量:249
采纳率:0%
帮助的人:188万
展开全部
假设是按升序排列
冒泡是用第一个数和第二个数比较,将较大的放入第二个数,又用第一个数和第三个数比较,将较大的放在第三个数……以此类推,比较完后,就把最小的数选出来排在了第一位。
选择是用第一个数和第二个数比较,将较大的放入第二个数,又用第二个数和第三个数比较,将较大的放在第三个数……以此类推,比较完后,就把最大的数选出来排在了最后一位。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
shanglei100
推荐于2018-07-04
知道答主
回答量:4
采纳率:0%
帮助的人:6435
展开全部
是这样的
区别主要在交换的方式上

每一轮都把最大或最小的元素筛选出来放在相应的位置上
这是相同的
但是
对于每一轮
比如第一轮
要把1~n 中最大的那个放到n这个位置
冒泡法每次比较和移动相邻的两项
而选择排序每次交换当前项和第n项
我把代码写出来你就懂了:
冒泡:
for i:=1 to n-1 do
if (a[i]>a[i+1]) then swap(i,i+1);
选择:
for i:=1 to n-1 do
if (a[i]>a[n]) then swap(i,n);
(swap 表示交换)

总的来说,两种排序比较的次数是相同的
但交换的次数,选择排序是更少的
虽然两者的时间复杂度都是 O(n^2)
但通常,选择排序更快一点
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhoudancac
推荐于2018-02-27 · TA获得超过642个赞
知道答主
回答量:61
采纳率:0%
帮助的人:58.9万
展开全部
选择:
每次括号内最小的和括号内第一个交换(如果最小的就是在第一位那什么都不做)
【1 0 2 5 4 6 8】
0 【1 2 5 4 6 8】
0 1【2 5 4 6 8】
0 1 2 【5 4 6 8】
0 1 2 4 【5 6 8】
0 1 2 4 5【 6 8】
0 1 2 4 5 6 【8】

冒泡
相邻两个比较,顺序不对就交换,比较范围是括号里。圆圈为气泡,大气泡一直向上升。
第一趟
【③ 4 5 1 2 】
【4 ③ 5 1 2】
【4 3 ⑤ 1 2】
【4 3 1 ⑤ 2】
【4 3 1 2 ⑤】
第二趟重复以上步骤。
【④ 3 1 2】5
当某一趟一次交换都没有发生时说明排序结束。

区别:选择法每次外循环都只交换一次,而冒泡法可能需要交换多次。这样看来冒泡没有选择法经济。但是当对一个本来就是有序的n的数用选择法排,他仍然会傻乎乎的比较n-1次才认为排序完成,而冒泡法只比较第一轮,发现没有进行交换操作,就可以认为排序完成了。各有优势,看个人喜好了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式