每一趟从待排序的记录中选出最小的元素,顺序放在已排好序的序列最后,直到全部记录排序完毕。
选择排序的基本思想:给定数组:int[] array={里面n个数据};
从
[0~n-1]
遍历数组,找到最小的数与array[0]
交换;
从
[1~n-1]
遍历数组,找到最小的数与array[1]
交换;
从
[2~n-1]
遍历数组,找到最小的数与array[2]
交换;
以此类推,从
[i~n-1]
遍历数组,找到最小的数与array[i]
交换,当i=n-1-1
趟排序,数组最终排序完成。
源码地址:GitHub-AralSea,基本的Int类型数组进行排序的实现 SelectionSort类:代码片
.
/** * 排序选择:单一类型参数传递 * @param array */
public static void getSort(Integer[] array) {
if (null != array && array.length > 0) {
int length = array.length;
for (int i = 0; i < length; i++) {
// 记录下表的位置
int subscript = i;
for (int j = i + 1; j < length; j++) {
// 如果后面的数小于标记下标数字,更新下标位置
if (array[j] < array[subscript]) {
subscript = j;
}
}
// 替换
int flag = array[i];
array[i] = array[subscript];
array[subscript] = flag;
}
}
}
源码地址:GitHub-AralSea,使用模版(泛型)编写实现,支持多种类型数组 SelectionSort:代码片
.
/** * * 排序选择:使用泛型参数传递 * @param array */
public static <T extends Comparable<T>> void selectionSort(T[] array) {
if (null != array && array.length > 0) {
int length = array.length;
for (int i = 0; i < length; i++) {
// 记录下表的位置
int subscript = i;
for (int j = i + 1; j < length; j++) {
// 如果后面的数小于标记下标数字,更新下标位置
if (array[j].compareTo(array[subscript]) < 0) {
subscript = j;
}
}
// 替换
T flag = array[i];
array[i] = array[subscript];
array[subscript] = flag;
}
}
}
public static void main(String[] args) {
Integer[] array = {3,6,2,9,7,5,8,0,1,4};
Float[] floats = {3.3f,6.6f,2.2f,9.9f,7.7f,5.5f,8.8f,0.0f,1.1f,4.4f};
String[] strings = {"e", "g", "a", "c","k", "s"};
//getSort(array);
//getSOrtByJava(array);
selectionSort(array);
selectionSort(floats);
selectionSort(strings);
System.out.println(Arrays.toString(array));
System.out.println(Arrays.toString(floats));
System.out.println(Arrays.toString(strings));
}