`

选择排序

阅读更多
.

context:

1.图片show by pictures

2.源码source code


有图有真相:

第一轮:



第二轮:



第三轮:



源码部分:


package sortAlgorithem;

import java.util.Arrays;
import java.util.Random;

/**
 * 
 * @author ocaicai@yeah.net @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]




分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics