今天介绍另外一种数组排序方法:选择排序
基本思路:从所有元素中选择一个最小元素a[i]放到a[0](即让最小元素a[i]与a[0]交换),作为第一轮;第二轮是从a[1]开始到最后的各个元素中选择一个最小的元素。放到a[1]中;.......依此类推。n个数要进行(n-1)轮
这种其实和我们之前讨论的冒泡排序2 类似,只是我们把交换放置再外层for,减少了交换次数
效率:交换次数减少到N,但是比较次数 仍然为N的平方
示意图
具体代码:
package datastrucates.arrays.sort;
/**
* 选择排序
*
* @author wuxin
*
*/
public class SelectSort {
public static void selectSort(int as[]) {
for (int i = 0; i < as.length; i++) {
int min = i;
for (int j = i + 1; j < as.length; j++) {
if (as[min] > as[j]) {
min = j; //注意此处找到比我们之前定义的更小的元素
}
}
//此处交换位置再外层for
int temp = as[min];
as[min] = as[i];
as[i] = temp;
}
}
public static void printDatas(int[] as) {
System.out.println("++++++++++++++++++++++++++++");
for (int a : as) {
System.out.println(a);
}
}
public static void main(String[] args) {
int[] as = new int[] { 1, 3, 6, 5, 8 };
printDatas(as);
selectSort(as);
printDatas(as);
}
}
运行结果: