排序算法3 — 选择排序

原理:在数组中,选出区间[i,n)的最小值,然后与i位置的值进行比较,如果i的值比最小值还小,那么久交换他们的位置。

动画演示:

请查看链接

代码演示:数组长度为100000,数组范围[10,10000],源代码如下:

package com.loveyou.sort;

/**
* @author Lemon Sun
* @time 2018年8月12日 下午12:10:57
* @version 1.0
*/
public class SortSelection extends SortBase {
	private static String CLASS_NAME_SELECTION = "com.loveyou.sort.SortSelection";
	
	@SuppressWarnings({"unchecked", "rawtypes"})
	public static void sort(Comparable[] arr) {
		int length = arr.length;
		if (length<1) {
			log.warn("数组中没有元素.");
			return ;
		}
		// 选择排序
		for(int i = 0;i<length;i++) {
			// 区间[i,n)最小值的index,初始化为i
			int minIndex = i;
			for(int j = i;j<length-1;j++) {
				if(arr[j].compareTo(arr[minIndex])<0) {
					minIndex = j;
				}
			}
			SortBase.swap(arr, i, minIndex);
		}
	}
	
	public static void main(String[] args) {
		try {
			Integer[] arr = SortBase.genRandomArr(100000, 10, 10000);
			SortBase.testSort(CLASS_NAME_SELECTION, "sort", arr);
		} 
		catch (Exception e) {
			log.error(e.getMessage(),e);
		}
		
	}
}
17:38:45.861 [main] INFO com.loveyou.sort.SortBase - already sorted.
运行时间:12287 ms

可以看见,对于10万个数进行排序,运行时间大概耗费了12秒多。虽然比冒泡排序好许多,但依然不乐观,我们实际开发当中也几乎不会用到选择排序。

 

关于SortBase类

下一篇:插入排序

点赞