选择排序之Java实现
一、方法一
1 package cn.com.zfc.lesson21.sort; 2 3 /** 4 * 5 * @title SelectSort 6 * @describe 选择排序 7 * @author 张富昌 8 * @date 2016年10月1日下午4:13:50 9 */ 10 public class SelectSort_1 { 11 // 简单选择排序的第 i 趟是从(elem[i],elem[i+1],...,elem[n-1])选择第 i小的元素,并将此元素放到 elem[i]; 12 // 简单选择排序是从未排序的序列中选择最小元素,接着是次小元素,依此类推,为寻找下一个最小元素,需检索数组中未排序部分; 13 // 但只一次交换即将待排元素放到正确位置上 14 15 public static void main(String[] args) { 16 // 声明整型数组 17 int[] array = new int[10]; 18 // 使用循环和随机数初始化数组 19 for (int i = 0; i < array.length; i++) { 20 array[i] = (int) Math.round(Math.random() * 100); 21 } 22 System.out.println("原始数组为:"); 23 for (int i : array) { 24 System.out.print(i + " "); 25 } 26 System.out.println(); 27 System.out.println("排序后的数组为:"); 28 for (int i : selectSort(array)) { 29 System.out.print(i + " "); 30 } 31 } 32 33 /** 34 * 35 * 功能:选择排序(从小到大)的基本思想是,首先,选出最小的数,放在第一个位置;然后,选出第二小的数,放在第二个位置;以此类推, 36 * 直到所有的数从小到大排序。在实现上,我们通常是先确定第i小的数所在的位置,然后,将其与第i个数进行交换。 37 * 38 * 参数:int[] array 39 * 40 * 返回类型:int[] 41 */ 42 public static int[] selectSort(int[] array) { 43 // 使用临时数组,替代原始数组 44 int[] arr = array; 45 for (int i = 0; i < arr.length - 1; i++) { 46 // 存放当前最小值的索引 47 int min_index = i; 48 for (int j = i + 1; j < arr.length; j++) { 49 // 判断当前的最小值的索引 50 if (arr[min_index] > arr[j]) { 51 min_index = j; 52 } 53 } 54 // 如果此时的 i 不等于 min_index,则交换该位置上的值 55 if (i != min_index) { 56 int temp = arr[min_index]; 57 arr[min_index] = arr[i]; 58 arr[i] = temp; 59 } 60 } 61 return arr; 62 } 63 }
运行结果:
二、方法二
1 package cn.com.zfc.lesson21.sort; 2 3 /** 4 * 5 * @title SelectSort 6 * @describe 选择排序 7 * @author 张富昌 8 * @date 2016年10月1日下午4:13:50 9 */ 10 public class SelectSort_2 { 11 // 简单选择排序的第 i 趟是从(elem[i],elem[i+1],...,elem[n-1])选择第 i小的元素,并将此元素放到 elem[i]; 12 // 简单选择排序是从未排序的序列中选择最小元素,接着是次小元素,依此类推,为寻找下一个最小元素,需检索数组中未排序部分; 13 // 但只一次交换即将待排元素放到正确位置上 14 15 public static void main(String[] args) { 16 // 声明整型数组 17 int[] array = new int[10]; 18 // 使用循环和随机数初始化数组 19 for (int i = 0; i < array.length; i++) { 20 array[i] = (int) Math.round(Math.random() * 100); 21 } 22 System.out.println("原始数组为:"); 23 for (int i : array) { 24 System.out.print(i + " "); 25 } 26 System.out.println(); 27 System.out.println("排序后的数组为:"); 28 for (int i : selectSort(array)) { 29 System.out.print(i + " "); 30 } 31 } 32 33 /** 34 * 35 * 功能:选择排序(从小到大)的基本思想是,首先,选出最小的数,放在第一个位置;然后,选出第二小的数,放在第二个位置;以此类推, 36 * 直到所有的数从小到大排序。在实现上,我们通常是先确定第i小的数所在的位置,然后,将其与第i个数进行交换。 37 * 38 * 参数:int[] array 39 * 40 * 返回类型:int[] 41 */ 42 public static int[] selectSort(int[] array) { 43 // 使用临时数组,替代原始数组 44 int[] arr = array; 45 for (int i = 0; i < arr.length - 1; i++) { 46 // 存放当前最小值的索引 47 int min_index = i; 48 for (int j = i + 1; j < arr.length; j++) { 49 // 判断当前的最小值的索引 50 if (arr[min_index] > arr[j]) { 51 min_index = j; 52 } 53 } 54 // 如果此时的 i 不等于 min_index,则交换该位置上的值 55 if (i != min_index) { 56 int temp = arr[min_index]; 57 arr[min_index] = arr[i]; 58 arr[i] = temp; 59 } 60 } 61 return arr; 62 } 63 }
运行结果: