.
context:
1.图片show by pictures
2.源码source code
有图有真相:
第一轮:
第二轮:
第三轮:
源码部分:
package sortAlgorithem;
import java.util.Arrays;
import java.util.Random;
/**
*
* @author [email protected] @date: 2011-5-1 值得注意的都在详细的注释里面了
*/
public class SelectSortTest {
public static void main(String[] args) {
// 定义一个数组
int[] emptyArray = new int[10];
// 初始化数组
int[] targetArray = initArray(emptyArray);
// 打印最后的数组
System.out
.println("排序后的数组:" + Arrays.toString(selectSort(targetArray)));
}
private static int[] selectSort(int[] array) {
// totalTurns总共比较的次数比数组的长度少1,比如:数组长度为2时只需比较1次
int totalTurns = array.length - 1;
// countedTurns:已经比较了的轮数
for (int countedTurns = 0; countedTurns < totalTurns; countedTurns++) {
// 临时的索引用来记录每一轮比较结果的目的(最大或者最小)索引,每一轮都从第一个位置0开始
int tempIndex = 0;
// 每一次临时的都从目标的第一个开始比较
for (int targetIndex = 0; targetIndex < array.length - countedTurns; targetIndex++) {
// 如果目标索引处的值比临时索引处的值大,那么将此索引赋值给临时索引
if (array[targetIndex] > array[tempIndex]) {
tempIndex = targetIndex;
}
}
// 一轮比较完后才进行临时索引(实际上是最大或者最小值的索引了)和最高处交换值
swapTwoIndexValue(array, tempIndex, array.length - 1 - countedTurns);
}
return array;
}
/**
* function:交换两索引处的值
*
* @param array
* @param oneIndex
* @param anotherIndex
*/
private static void swapTwoIndexValue(int[] array, int oneIndex,
int anotherIndex) {
int tempValue = array[oneIndex];
array[oneIndex] = array[anotherIndex];
array[anotherIndex] = tempValue;
}
// 初始化数组:使用随机数为数组赋值
private static int[] initArray(int[] array) {
Random random = new Random();
for (int i = 0; i < array.length; i++) {
array[i] = random.nextInt(100) - random.nextInt(100);
}
System.out.println("原数组:" + Arrays.toString(array));
return array;
}
}
输出结果:
原数组:[52, -58, 8, -49, 45, -53, 9, 56, -1, -17]
排序后的数组:[-58, -53, -49, -17, -1, 8, 9, 45, 52, 56]
原数组:[-61, -22, -1, 9, 24, -14, -8, -24, 77, 60]
排序后的数组:[-61, -24, -22, -14, -8, -1, 9, 24, 60, 77]