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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© YC匪帮 中级黑马   /  2015-9-8 17:32  /  623 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


  1. import java.util.*;
  2. /**
  3. * 直接选择排序算法的Java实现。
  4. *   1:从a[0]-a[N-1]中选出最小的数据,然后与a[0]交换位置
  5. *   2:从a[1]-a[N-1]中选出最小的数据,然后与a[1]交换位置(第1步结束后a[0]就是N个数的最小值)
  6. *   3:从a[2]-a[N-1]中选出最小的数据,然后与a[2]交换位置(第2步结束后a[1]就是N-1个数的最小值)
  7. *   以此类推,N-1次排序后,待排数据就已经按照从小到大的顺序排列了。
  8. */
  9. public class SelectSort
  10. {
  11.     public static void main(String[] args)
  12.     {
  13.         //声明一个数组
  14.         int[] array = new int[10];
  15.         //为这个数组随机填入整型数字
  16.         Random random = new Random();
  17.         for (int i = 0; i < array.length ; i++)
  18.         {
  19.             array[i] = random.nextInt(500);
  20.         }
  21.   
  22.         System.out.print("原始数组  :");
  23.         System.out.println(Arrays.toString(array));
  24.         /****************************************
  25.          下面开始正式的“直接选择排序”算法
  26.          直接选择排序的关键:
  27.             1:从a[0]-a[N-1]中选出最小的数据,然后与a[0]交换位置
  28.             2:从a[1]-a[N-1]中选出最小的数据,然后与a[1]交换位置(第1步结束后a[0]就是N个数的最小值)
  29.             3:从a[2]-a[N-1]中选出最小的数据,然后与a[2]交换位置(第2步结束后a[1]就是N-1个数的最小值)
  30.             以此类推,N-1次排序后,待排数据就已经按照从小到大的顺序排列了。
  31.          ****************************************/
  32.          //N个数组元素,就需要循环N轮
  33.          for(int i = 0; i < array.length; i++){
  34.              //最小数的索引,该索引每次都根据外层循环的计数器来觉得初始值。
  35.              int minIndex = i;
  36.              for (int j = i + 1; j < array.length; j++)
  37.              {
  38.                  //根据最小数的索引,判断当前这个数是否小于最小数。
  39.                  //如果小于,则把当前数的索引作为最小数的索引。
  40.                  //否则不处理。
  41.                  if(array[minIndex] > array[j]){
  42.                      minIndex = j;
  43.                  }
  44.                  //直到循环完成的时候,minIndex肯定就是当前这轮循环中,最小的那个。
  45.              }
  46.              //System.out.print(i + "轮,最小数" + array[minIndex] + ",");
  47.              //System.out.print("原索引" + minIndex + ",新索引" + i);
  48.              //得到最小数的索引后,把该索引对应的值放到最左边,并且把最左边的值放到索引所在的位置.
  49.              //最左边的值
  50.              int temp = array[i];
  51.              //把最小数索引对应的值放到最左边
  52.              array[i] = array[minIndex];
  53.              //把原来最左边对应的值放到最小数索引所在的位置
  54.              array[minIndex] = temp;
  55.              System.out.println(String.format("%2s",(i + 1)) + "轮排序后:" + Arrays.toString(array));
  56.          }
  57.     }
  58. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
洋葱头头 + 1

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马