选择排序:从数组中找一个最小值放到第一个位置,在后面n-1个位置选择一个最小值放到最后一个位置。。。
具体:假设第一个值为数组中最小值min=i,遍历数组,如果后面元素有小于第一个记录的最小值,则将min=j;最后判断,如果min值发生改变,则交换下标为i与min的值。如果数组长度为n,则最多遍历n-1次得到有序数组。选择排序的时间复杂度为O(n^2)----n个数,遍历n-1次
选择排序是稳定排序,他保证相同值的元素排序后位置不发生变化
package sort;
public class SelectSort {
/*
* 选择排序
* 参数说明:
* a -- 待排序的数组
* n -- 数组的长度
*/
public static void selectSort(int[] a, int n) {
int i; // 有序区的末尾位置
int j; // 无序区的起始位置
int min; // 无序区中最小元素位置
for(i=0; i<n; i++) {
min=i;
// 找出"a[i+1] ... a[n]"之间的最小元素,并赋值给min。
for(j=i+1; j<n; j++) {
if(a[j] < a[min])
min=j;
}
// 若min!=i,则交换 a[i] 和 a[min]。
// 交换之后,保证了a[0] ... a[i] 之间的元素是有序的。
if(min != i) {
int tmp = a[i];
a[i] = a[min];
a[min] = tmp;
}
}
}
public static void main(String[] args) {
int i;
int[] a={20,40,30,10,60,50};
System.out.println("before sort:");
for (i = 0; i < a.length; i++) {
System.out.print(a[i]+" ");
}
System.out.println();
selectSort(a,a.length);
System.out.println("after sort:");
for (i = 0; i < a.length; i++) {
System.out.print(a[i]+" ");
}
}
}