A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈虹旭 中级黑马   /  2012-7-26 18:12  /  2641 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 陈虹旭 于 2012-7-26 19:13 编辑

看完比老师的视频由于老师没有对定义进行解释,对选择排序和冒泡排序的定义的理解很模糊,所以想请教一下各位大虾:
1、选择排序的定义是什么?怎么才能很用很简短的话来概括选择排序(更容易理解)
2、冒泡排序的定义是什么?怎么才能很用很简短的话来概括选择排序(更容易理解)

11 个回复

倒序浏览
回复 使用道具 举报
本帖最后由 王渠 于 2012-7-26 19:15 编辑

如果说怎么样从代码上清楚的看出来的话。
选择法:在两个循环之间会定义最大值(或最小值),再在下面循环中找到真正的最值,判断定义的角标和真正的是否相同,不同则交换位置。
冒泡发的话,可以看见两个循环体里面,判断后直接就是交换动作。而且是相邻的两个元素进行判断交换。

理解的话:选择法:是一次性找到老大,放到老大的位置,再找老二,放到老二的位置。
               冒泡法:是和自己隔壁比,比不过自己就老实站前面,几轮下来。顺序也就排好了
回复 使用道具 举报
选择排序就是开始拿第一个数arr[0]和后面的每一个数比较,如果后面的数比第一个小,那么就小的值赋给arr[0],那么最小的一个数就排在第一位啦,即arr[0]就是最小的数了。然后是把arr[1]和后面的每一位数比较,过程如前.以此类推。
冒泡排序就是相邻的两个数比较大小,如果前面的数比后面的大,那么这两个数的值就调换一下,然后拿大的再和后面的比较。这样最大值就出现在最后位了。然后就在重复之前的过程。以此类推
附课堂上的图:

3.jpg (59.99 KB, 下载次数: 59)

冒泡排序

冒泡排序

4.jpg (67.32 KB, 下载次数: 42)

选择排序

选择排序

评分

参与人数 1技术分 +1 收起 理由
蒋映辉 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 位丹丹 于 2012-7-26 18:54 编辑

选择排序:每一次从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。
1、第1趟排序   在无序区R[1..n]中选出关键字最小的记录R[k],将它与无序区的第1个记录R[1]交换,使R[1..1]和R[2..n]分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。   ……  
2、第i趟排序   第i趟排序开始时,当前有序区和无序区分别为R[1..i-1]和R(i..n)。该趟排序从当前无序区中选出关键字最小的记录 R[k],将它与无序区的第1个记录R交换,使R[1..i]和R分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。   
这样,n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果。
冒泡排序:
1.冒泡即形象的描述气泡由于在水中受压强的影响,从下往上越来越大;故应用到编程中,一串泡,是由小到大排列的
2、给一串无规律的数字;
  按冒泡思想:第一次就冒出最大的,找出来了,还要排序的总数减一
                      第二次就冒出剩余的最大的,找出来了,还要排序的总数再减一
                            .
                            .
                            .
                            .
              最后一次就是那个,不用找了,还要排序的总数为0;
选择排序参考百度百科。。。对于定义的理解,建议去百度上查一下

评分

参与人数 1技术分 +1 收起 理由
蒋映辉 + 1

查看全部评分

回复 使用道具 举报
feigecal 发表于 2012-7-26 18:45
http://bbs.itheima.com/forum.php?mod=viewthread&tid=18104&page=1#pid104628

谢谢了
回复 使用道具 举报
罗宵 发表于 2012-7-26 18:51
选择排序就是开始拿第一个数arr[0]和后面的每一个数比较,如果后面的数比第一个小,那么就小的值赋给arr[0] ...

呵呵  明白了  谢谢
回复 使用道具 举报
位丹丹 发表于 2012-7-26 18:52
选择排序:每一次从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到 ...

谢谢 看过以后觉得对冒泡理解得更形象一些了
回复 使用道具 举报
王楠 初级黑马 2012-7-26 19:13:17
9#
每次比较相邻两数
小的交换到前面
每轮结束后最大的数交换到最后
例如:
for (i = 0; i < N-1 ; i++)
{
      for (j = 0; j < N-1-i ; j++)
      {
            // 比较 j 和 j+1 位置的元素
            // 如果前大后小就交换
      }
}
回复 使用道具 举报
王楠 发表于 2012-7-26 19:13
每次比较相邻两数
小的交换到前面
每轮结束后最大的数交换到最后

你说的是冒泡排序吧  呵呵  我已经懂了  谢谢了!
回复 使用道具 举报
冒泡排序:依次比较相邻的两个元素,最值往后移...重复n-1轮
选择排序:从n个元素中挑个最值放第一个位置,剩下的n-1个元素中挑个最值放第二个位置。。。。


冒泡排序:数组a[n]的第一个元素和第二个元素比,若比第二个大,则位置交换,然后第二个和第三个比,大的放在后面,依次类推,经过一轮比较后,最大的元素便排在了最后,按照上面方法第二论找出次大的放到了倒数第二个位置,经过n-1轮比较后,便得到有小到大的排序。
选择排序:首先在所有的记录中选出键值最小的记录,把它与第一个记录交换;然后在其余的记录中再选出键值次小的记录与第二个换;依此类推,直至所有记录排序完成。在第i趟中,通过n-i次键值比较选出所需记录 。
回复 使用道具 举报
曹晓涵 发表于 2012-7-26 19:16
冒泡排序:依次比较相邻的两个元素,最值往后移...重复n-1轮
选择排序:从n个元素中挑个最值放第一个位置, ...

不客气,我也是才看到就给你回复的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马