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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© nuoxi0318 中级黑马   /  2013-7-14 20:13  /  973 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 nuoxi0318 于 2013-7-14 21:19 编辑


  1. <BLOCKQUOTE>
  2. <P>public void SelectSortProcedure()//选择排序
  3. {
  4. int pass,i,temp,k; </P>
  5. <P>for(pass=0;pass<DataArayy.length;pass++) //选择多次,有序子列增长
  6. {
  7. for(i=pass,k=i;i<DataArayy.length;i++)//一次选择过程无序子列减少 </P>
  8. <P>if(DataArayy<DataArayy[k])  //选择剩余排序中最小者
  9. k=i ;
  10. temp = DataArayy[pass];//排在剩余序列的最前面
  11. DataArayy[pass] = DataArayy[k];
  12. DataArayy[k] = temp; </P>
  13. <P>for(i=0;i<DataArayy.length;i++)
  14. SortPro[pass+1] = DataArayy;//记录本论选择后的数据排列情况 </P>
  15. <P>}
  16. } </P>
复制代码
不明白第2个FOR循环的范围到那里,不明白K=I的话不一直是自身在比较么?

评分

参与人数 1技术分 +1 黑马币 +1 收起 理由
杨兴庭 + 1 + 1 记得排版

查看全部评分

6 个回复

正序浏览
所谓选择排序,通俗的讲就是按次序可以使从前往后或者从后往前拿出数据与其他的数据比较,按照排序原则(递增或递减)呼唤数据,从而在这个位置上得到剩下的包括这个元素的最小或者最大的元素,而已经拿出来也就是第二个for中k记录下标位置的所有元素都已经拍好了序。所以是一直循环到数组结束,以保证k记录的那个位置的元素是剩下的元素中最小或者最大的元素。这就是选择排序,就是个不断选择的过程。
回复 使用道具 举报
杨兴庭 发表于 2013-7-14 20:59
-------------------坚持学习,黑马因你而精彩---------------

:#搞明白了,
回复 使用道具 举报

:P3Q  了解思密达
回复 使用道具 举报
-------------------坚持学习,黑马因你而精彩---------------

a.jpg (45.79 KB, 下载次数: 0)

a.jpg

b.jpg (99.21 KB, 下载次数: 0)

b.jpg
回复 使用道具 举报

:( 搞半天没找到插入代码在什么地方。。。
回复 使用道具 举报
本帖最后由 白堇翎 于 2013-7-14 20:45 编辑
  1. public void SelectSortProcedure()//选择排序
  2. {
  3. int pass,i,temp,k;

  4. for(pass=0;pass<DataArayy.length;pass++) //选择多次,有序子列增长
  5. {
  6. for(i=pass,k=i;i<DataArayy.length;i++)//一次选择过程无序子列减少

  7. if(DataArayy<DataArayy[k])  //选择剩余排序中最小者
  8. k=i ;
  9. temp = DataArayy[pass];//排在剩余序列的最前面
  10. DataArayy[pass] = DataArayy[k];
  11. DataArayy[k] = temp;

  12. for(i=0;i<DataArayy.length;i++)
  13. SortPro[pass+1] = DataArayy;//记录本论选择后的数据排列情况

  14. }
  15. }
复制代码
修正
  1. public void SelectSortProcedure()//选择排序
  2. {
  3. int pass,i;
  4. int[] DataArayy = {};
  5. for(pass=0;pass<DataArayy.length;pass++) //选择多次,有序子列增长
  6. {
  7. for(i=pass,;i<DataArayy.length;i++) [//一次选择过程无序子列减少

  8. if(DataArayy[i]<DataArayy[pass]) {  //选择剩余排序中最小者
  9. DataArayy[pass]=DataArayy[i] ^DataArayy[pass]; //用与运算换位
  10. DataArayy[i]=DataArayy[i]^DataArayy[pass];
  11. DataArayy[pass] = DataArayy[i]^DataArayy[pass];
  12. }
  13. }
  14. }
  15. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1 替楼主谢谢你了

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马