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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

看老毕的视频,选择排序是拿头一个依次和后面的比,然后把较小的放进头一个里面,最后把最小的放到头一个里面。冒泡是相邻的两个比一下,最后把最大的那个放到最后一个里边。感觉都是把最值放到两头,感觉他俩没多大区别???有人解惑没。

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

6 个回复

正序浏览
区别你都说出来了。
回复 使用道具 举报
冒泡排序

冒泡排序:它的时间复杂度为O(n^2),虽然不及堆排序、快速排序的O(nlogn,底数为2),但是有两个优点:

   1.“编程复杂度”很低,很容易写出代码;
   2.具有稳定性,这里的稳定性是指原序列中相同元素的相对顺序仍然保持到排序后的序列,而堆排序、快速排序均不具有稳定性。不过,一路、二路归并排序、平衡二叉树排序的速度均比冒泡排序快,且具有稳定性,但速度不及堆排序、快速排序。
基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。
  1. public static int[] bubbleSort(int[] arr)
  2. {
  3.         for(int i=0;i<arr.length-1;i++)
  4.         {
  5.                 for(int j=i+1;j<arr.length;j++)
  6.                 {
  7.                         if(arr[i]>arr[j])
  8.                         {  
  9.                                 int temp;  
  10.                                 temp=arr[j];
  11.                                 arr[j]=arr[i];
  12.                                 arr[i]=temp;  
  13.                         }  
  14.                 }  
  15.         }  
  16.         return arr;
  17. }
复制代码
简单选择排序:
   在简单选择排序过程中,所需移动记录的次数比较少。最好情况下,即待排序记录初始状态就已经是正序排列了,则不需要移动记录。最坏情况下,即待排序记录初始状态是按逆序排列的,则需要移动记录的次数最多为3(n-1)。简单选择过程中需要进行的比较次数与初始状态下待排序的记录序列的排列情况无关。当i=1时,需进行n-1次比较;当i=2时,需进行n-2次比较;依次类推,共需要进行的比较次数是∑ =(n-1)+(n-2)+…+2+1=n(n-1)/2,即进行比较操作的时间复杂度为O(n2)。这种方法其实是对冒泡排序的深入。
  1. public static int[] selectSort(int[] arr)
  2. {
  3.          for(int i=0;i<arr.length-1;i++)
  4.          {
  5.                  int min = i;
  6.                  for (int j=i+1;j<arr.length;j++)
  7.                  {
  8.                          if(arr[min]>arr[j])
  9.                     min = j;
  10.          }  
  11.             if(min!=i)
  12.                         {  
  13.                                 int temp = arr[i];  
  14.                 arr[i] = arr[min];  
  15.                 arr[min] = temp;  
  16.             }  
  17.        }  
  18.         return arr;
  19. }
复制代码








评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
冒泡排序 是两个挨着的对比,大的后排;
选择排序可以这么做就看出差别了,在一趟遍历中,记住值最小的索引值或者下标值,然后把该索引上的数组元素值,跟第一个互换。。第二次跟第二个,这样依次互换。。。这么就能实现选择排序。

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
选择排序是相邻的两个数据进行比较,最值出现在最后。
冒泡排序是拿每个数和其他的每个数进行比较,先是第一个数和其他数比较,较大值出现在最后(有可能是最值,有可能不是),然后是第二个数和其他数进行比较,依次类推。

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
那个,别误解,我的意思是我和你一样的是菜鸟,刚开始学
回复 使用道具 举报
我和你是一样的,菜鸟,我就说说我的感觉吧,其实你说的也对,都是取出最值来,但,你仔细的想,选择排序它每次外循环,实际能获取到一个最小值;而冒泡循环,相邻的进行比较,每次外循环都会比较出多个值,并且进行换位动作。比起选择,感觉上,冒泡排序的效率会稍高些。。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马