选择排序
基本介绍
选择式排序也属于内部排序法,是从欲排序的数据中,按指定的规则选出某一元素,再依规定交换位置后达到排序的目的。
基本思想
选择排序(select sorting)也是一种简单的排序方法。
它的基本思想是:第一次从 arr[0]~arr[n-1]中选取最小值,与 arr[0]交换,第二次从 arr[1]~arr[n-1]中选取最小值,与 arr[1]交换,第三次从 arr[2]~arr[n-1]中选取最小值,与 arr[2]交换,…,第 i 次从 arr[i-1]~arr[n-1]中选取最小值,与 arr[i-1]交换,…, 第 n-1 次从 arr[n-2]~arr[n-1]中选取最小值,与 arr[n-2]交换,总共通过 n-1 次,得到一个按排序码从小到大排列的有序序列。
个人理解:选择排序就是在数组中选择出最小的(最大的)那个元素,然后记录该元素的位置,并与第一个元素进行交换,第一个元素就排好了序。接着在第二个元素到最后一个元素中选择出最小的(最大的)一个元素,并与第二个元素交换位置……重复这一步骤,直到所有元素排好序。
图解
代码实现
package com.glk.sort;
import java.util.Arrays;
public class SelectionSort {
public static void main(String[] args) {
int a[] = { 3, 9, -1, 10, -2};;
System.out.println(Arrays.toString(SelectionSortTest(a)));
}
public static int[] SelectionSortTest(int[] array) {
for (int j = 0; j <array.length-1 ; j++) {
int min=array[j];
int minIndex=j;
for (int i = j+1; i < array.length; i++) {
// 此时的假定最小值不是最小值
if (array[i] <= min) {
min = array[i]; //重置min
minIndex = i; //重置minIndex
}
}
// 将最小值放到arr[j],即交换
// 再优化一下,只有当最小下标不为j时,才需要交换
if (minIndex!=j) {
array[minIndex] = array[j];
array[j] = min;
}
}
return array;
}
}