原理
选择排序是一种不稳定的初级排序算法,适用于数据量比较小的排序。假设升序排序,它的原理是:首先找出数组中最小的元素,将它与第一个元素交换,如果第一个元素本来就是最小的,则不交换;然后继续在剩下的元素中找到最小元素,将它与第二个元素交换位置,如此循环,直到排完整个数组。由于该方法不断选出最小元素,因此叫做选择排序,这种排序方式的数据移动是最少的,为数组长度N,但是大约需要比较(N*N) /2次。
Java的简单实现
package me.geed.algorithms;
public class SelectionSort {
/**
* 初级排序算法
* 选择排序算法——对一个数组进行升序排序
* @param array
*/
public static void sort(int[] array) {
int len = array.length;
for (int i = 0; i < len; i++) {
int min = i;
for (int j = i + 1; j < len; j++) {
if (array[j] < array[min]) {
int temp = array[j];
array[j] = array[min];
array[min] = temp;
}
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] array = {1, 9, 7, 3, 4, 6, 12, 8, 2};
SelectionSort.sort(array);
for (int value : array) {
System.out.print(value + " ");
}
}
}
输出结果为
1 2 3 4 6 7 8 9 12
时间复杂度
选择排序的平均时间复杂度为O(N*N)