黑马程序员技术交流社区

标题: 关于选择排序和冒泡排序的理解 [打印本页]

作者: 陈虹旭    时间: 2012-7-26 18:12
标题: 关于选择排序和冒泡排序的理解
本帖最后由 陈虹旭 于 2012-7-26 19:13 编辑

看完比老师的视频由于老师没有对定义进行解释,对选择排序和冒泡排序的定义的理解很模糊,所以想请教一下各位大虾:
1、选择排序的定义是什么?怎么才能很用很简短的话来概括选择排序(更容易理解)
2、冒泡排序的定义是什么?怎么才能很用很简短的话来概括选择排序(更容易理解)
作者: 孙飞    时间: 2012-7-26 18:45
http://bbs.itheima.com/forum.php ... mp;page=1#pid104628
作者: 王渠    时间: 2012-7-26 18:50
本帖最后由 王渠 于 2012-7-26 19:15 编辑

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

理解的话:选择法:是一次性找到老大,放到老大的位置,再找老二,放到老二的位置。
               冒泡法:是和自己隔壁比,比不过自己就老实站前面,几轮下来。顺序也就排好了

作者: 罗宵    时间: 2012-7-26 18:51
选择排序就是开始拿第一个数arr[0]和后面的每一个数比较,如果后面的数比第一个小,那么就小的值赋给arr[0],那么最小的一个数就排在第一位啦,即arr[0]就是最小的数了。然后是把arr[1]和后面的每一位数比较,过程如前.以此类推。
冒泡排序就是相邻的两个数比较大小,如果前面的数比后面的大,那么这两个数的值就调换一下,然后拿大的再和后面的比较。这样最大值就出现在最后位了。然后就在重复之前的过程。以此类推
附课堂上的图:

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

冒泡排序

冒泡排序

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

选择排序

选择排序

作者: 位雪    时间: 2012-7-26 18:52
本帖最后由 位丹丹 于 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;
选择排序参考百度百科。。。对于定义的理解,建议去百度上查一下
作者: 陈虹旭    时间: 2012-7-26 19:07
feigecal 发表于 2012-7-26 18:45
http://bbs.itheima.com/forum.php?mod=viewthread&tid=18104&page=1#pid104628

谢谢了
作者: 陈虹旭    时间: 2012-7-26 19:10
罗宵 发表于 2012-7-26 18:51
选择排序就是开始拿第一个数arr[0]和后面的每一个数比较,如果后面的数比第一个小,那么就小的值赋给arr[0] ...

呵呵  明白了  谢谢
作者: 陈虹旭    时间: 2012-7-26 19:12
位丹丹 发表于 2012-7-26 18:52
选择排序:每一次从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到 ...

谢谢 看过以后觉得对冒泡理解得更形象一些了
作者: 王楠    时间: 2012-7-26 19:13
每次比较相邻两数
小的交换到前面
每轮结束后最大的数交换到最后
例如:
for (i = 0; i < N-1 ; i++)
{
      for (j = 0; j < N-1-i ; j++)
      {
            // 比较 j 和 j+1 位置的元素
            // 如果前大后小就交换
      }
}

作者: 陈虹旭    时间: 2012-7-26 19:15
王楠 发表于 2012-7-26 19:13
每次比较相邻两数
小的交换到前面
每轮结束后最大的数交换到最后

你说的是冒泡排序吧  呵呵  我已经懂了  谢谢了!
作者: 曹晓涵    时间: 2012-7-26 19:16
冒泡排序:依次比较相邻的两个元素,最值往后移...重复n-1轮
选择排序:从n个元素中挑个最值放第一个位置,剩下的n-1个元素中挑个最值放第二个位置。。。。


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

不客气,我也是才看到就给你回复的




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2