算法思想:对于一组数据,经过第一次排序得到最小的记录,然后将该记录与第一个记录的位置进行交换;接着对不包括第一个记录的其他记录进行第二轮比较,得到最小的记录并与第二个记录进行位置交换;重复该操作,直至进行比较的记录只有一个。
例子:举个栗子,对5,3,8,6,4这个无序序列进行简单选择排序,首先要选择5以外的最小数来和5交换,也就是选择3和5交换,一次排序后就变成了3,5,8,6,4.对剩下的序列一次进行选择和交换,最终就会得到一个有序序列。其实选择排序可以看成冒泡排序的优化,因为其目的相同,只是选择排序只有在确定了最小数的前提下才进行交换,大大减少了交换的次数。选择排序的时间复杂度为O(n^2)。
package com.haobi;
/*
* 选择排序
*/
public class SelectSort {
public static void selectSort(int[] array) {
int temp = 0;
int flag = 0;
for(int i=0;i<array.length;i++) {
temp = array[i];//基准元素
flag = i;
for(int j=i+1;j<array.length;j++) {//循环,直至找出[j,array.length]最小的元素
if(array[j] < temp) {//如果数组中存在比temp小的数
temp = array[j];//将该数赋值给temp
flag = j;//数组下标赋值给flag
}
}
if(flag != i) {//如果flag发生改变,则说明基准元素不是最小值,交换数据
array[flag] = array[i];//将最小值赋值给基准元素
array[i] = temp;//将之前存放在temp的基准元素值赋值给最小值所在的位置
}
}
}
public static void main(String[] args) {
int[] array = {64,5,7,89,6,24};
selectSort(array);
for(int i=0;i<array.length;i++) {
System.out.print(array[i]+" ");
}
}
}
程序输出结果如下:
5 6 7 24 64 89