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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 邢义敏 中级黑马   /  2013-3-3 21:02  /  2159 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

直接选择排序方法的原理是什么,今天看了书上写的,把我绕晕了,求大神指点

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

7 个回复

倒序浏览
JAVA中数组排序方法我总结了一下常见的8种排序方法,有原理介绍和实现代码,你可以看下
回复 使用道具 举报
本帖最后由 解澎 于 2013-3-3 21:22 编辑

选择排序:
每次都找到当次最大的数,按大小顺序依次放入数组相应位置
第一次先找到最大的数并记下其位置,如果其不在数组第一位,则将其与第一位交换,使最大数置于第一位
第二次再循环查找第二大的数并记下其位置,如果其不在数组第二位,
则将其与第二位交换,使最大数置于第二位
第i次再循环查找第i大的数并记下其位置,如果其不在数组第 i位,
则将其与第 i位交换,使最大数置于第 i位。
依次类推,直到选择完所有的数。

我也是自学,代码还不行。原理大概就是这样。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
比如一个整型数组,先让第一个元素依次和后面的元素比较,如果比他小就交换位置,这样经过第一次选择,第一个位置上的元素一定是最小的。
第二次从第二个元素开始比较,方法一样,依次和后面的每个元素比较,比他小交换位置。这样类推,最后让第n-1和第n个元素比较下就完事了。ok

}%0H)CZN)07`Q7E[F9@WGKY.jpg (45.69 KB, 下载次数: 19)

}%0H)CZN)07`Q7E[F9@WGKY.jpg

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
这个图表现的是数组中数进行升序排列,降序排列思想一样!
加油!

选择排序.jpg (77.2 KB, 下载次数: 16)

选择排序.jpg

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 黑马朱超 于 2013-3-7 11:56 编辑


我做了个图,把直接选择排序画出来了,总结了选择排序的思想。
再打个比方,选择排序就像这样一件事情:一群人中要按找身高排序号
然后我的的算法就是:每个人和其他人比身高
其中:每个人作为主语就是一个循环
          其他人作为被比较者又是一个循环
          比身高就相当于我们把元素交换位置





评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
对数组的操作核心思想就是对角标的控制操作。数组排序也是如此。直接选择排序是先选定数组的一个角标位置(通常是头角标),然后让数组中的每一个元素和该位置元素进行比较,将较大(小)的赋给该位置 ,一轮下来,就会在该位置得到最大(小)值。然后继续下一位置,以此类推就会得到从大到小(从小到大)的数组。我们发现如图

因此就会联想到for语句的嵌套
  1. class  SelectsortDemo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int[]arr={2,1,4,7,5};
  6.                 selectsort(arr);
  7.                 printarray(arr);
  8.         }

  9. public static void selectsort(int[]arr)
  10. {
  11.         for (int x=0;x<arr.length-1 ;x++ )
  12.         {
  13.                 for (int y=x+1;y<arr.length ;y++ )
  14.                 {
  15.                         if (arr[x]>arr[y])
  16.                         {
  17.                                 int temp=arr[x];
  18.                                 arr[x]=arr[y];
  19.                                 arr[y]=temp;
  20.                         }
  21.                 }
  22.         }
  23. }
  24. public static void printarray(int[]arr)
  25. {
  26.         for (int x=0;x<arr.length ;x++ )
  27.         {
  28.                 if (x!=arr.length-1)
  29.                 System.out.print(arr[x]+",");
  30.                 else
  31.                 System.out.print(arr[x]);
  32.         }
  33. }
  34. }
复制代码
数组{2,1,4,7,5}排序结果

直接选择排序.PNG (1.57 KB, 下载次数: 12)

直接选择排序.PNG

选择排序结果.PNG (1.16 KB, 下载次数: 0)

选择排序结果.PNG

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
那个。。图没想好怎么划,我写一下思路吧~~~~
选择排序是一种比较简单的排序方法,非常容易理解。
选择排序的基本思路是:
    对一个长度为n的数组进行n次遍历,第一趟遍历选出最大(或者最小)的元素,将之与数组的第一个元素交换;然后进行第二趟遍历,再从剩余的元素中选出最大(或者最小)的元素,将之与数组的第二个元素交换。这样遍历n次后,得到的就是降序(或者升序)数组。



希望对你有帮助~{:soso_e113:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马