/**
* 选择排序是一种简单的排序算法,原理是把待排序数组分为已排序好和未排序两个,开始先从数组中找到一个最小(最大)元素,
* 放在数组的开始位置作为已排序好数组,假设是第一个元素,然后跟后边元素去比较,小则更新,内部循环结束后去如果更新过了去交换值
*
* 和冒泡排序的区别,冒泡排序会依次比较交换相邻不合法元素,而选择排序每次遍历都是记录了最小(最大)元素的位置,最后只做一次交换即可
*
* 时间复杂度O(n^2)
*
* @author yanhom
*/
public class SelectionSort {
/**
* 注意点:两个循环数组下标,避免越界
*
* @param arr
*/
public static void sort(int[] arr) {
int len = arr.length;
for(int i = 0; i < len - 1; i++) { //已排序数组下标变化
int min = i; //记录最小(最大)元素
for (int j = i+1; j < len; j++) { //未排序数组下标变化
if(arr[j] < arr[min]) {
min = j; //更新值
}
}
if(min != i) {
swap(arr, i, min); //交换元素
}
}
}
private static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
public static void main(String[] args) {
int[] arr = {2,3,1,4,4,0,6,7,4,6,8,9};
sort(arr);
for(int i =0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
选择排序 -JAVA详解
于 2017-10-27 16:52:21 首次发布