选择排序之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 }
运行结果: