黑马程序员技术交流社区
标题:
直接选择排序的java实现
[打印本页]
作者:
YC匪帮
时间:
2015-9-8 17:32
标题:
直接选择排序的java实现
import java.util.*;
/**
* 直接选择排序算法的Java实现。
* 1:从a[0]-a[N-1]中选出最小的数据,然后与a[0]交换位置
* 2:从a[1]-a[N-1]中选出最小的数据,然后与a[1]交换位置(第1步结束后a[0]就是N个数的最小值)
* 3:从a[2]-a[N-1]中选出最小的数据,然后与a[2]交换位置(第2步结束后a[1]就是N-1个数的最小值)
* 以此类推,N-1次排序后,待排数据就已经按照从小到大的顺序排列了。
*/
public class SelectSort
{
public static void main(String[] args)
{
//声明一个数组
int[] array = new int[10];
//为这个数组随机填入整型数字
Random random = new Random();
for (int i = 0; i < array.length ; i++)
{
array[i] = random.nextInt(500);
}
System.out.print("原始数组 :");
System.out.println(Arrays.toString(array));
/****************************************
下面开始正式的“直接选择排序”算法
直接选择排序的关键:
1:从a[0]-a[N-1]中选出最小的数据,然后与a[0]交换位置
2:从a[1]-a[N-1]中选出最小的数据,然后与a[1]交换位置(第1步结束后a[0]就是N个数的最小值)
3:从a[2]-a[N-1]中选出最小的数据,然后与a[2]交换位置(第2步结束后a[1]就是N-1个数的最小值)
以此类推,N-1次排序后,待排数据就已经按照从小到大的顺序排列了。
****************************************/
//N个数组元素,就需要循环N轮
for(int i = 0; i < array.length; i++){
//最小数的索引,该索引每次都根据外层循环的计数器来觉得初始值。
int minIndex = i;
for (int j = i + 1; j < array.length; j++)
{
//根据最小数的索引,判断当前这个数是否小于最小数。
//如果小于,则把当前数的索引作为最小数的索引。
//否则不处理。
if(array[minIndex] > array[j]){
minIndex = j;
}
//直到循环完成的时候,minIndex肯定就是当前这轮循环中,最小的那个。
}
//System.out.print(i + "轮,最小数" + array[minIndex] + ",");
//System.out.print("原索引" + minIndex + ",新索引" + i);
//得到最小数的索引后,把该索引对应的值放到最左边,并且把最左边的值放到索引所在的位置.
//最左边的值
int temp = array[i];
//把最小数索引对应的值放到最左边
array[i] = array[minIndex];
//把原来最左边对应的值放到最小数索引所在的位置
array[minIndex] = temp;
System.out.println(String.format("%2s",(i + 1)) + "轮排序后:" + Arrays.toString(array));
}
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2