排序原理:
1.每一次遍历的过程中,都假定一个索引处的元素是最小值,和其他索引处的值依次进行比较,如果当前索引值大于其他某个索引处的值,则假定其他某个索引处的值为最小值,最后就可以找到最小值所在的索引.
2.交换第一个索引处和最小值所在的索引处的值
选择排序的方法:
package com.wt.algorwt.sort;
/*
简单的选择排序
*/
public class Selection {
/*
对数组a中的元素进行排序
*/
public static void sort(Comparable[] a){
//这是核心方法
for (int i=0;i<=a.length-2;i++){
//定义一个变量,记录最小元素所在的索引,默认为参与选择排序的第一元素所在的位置
int minIndex = i;
for (int j = i+1;j<a.length;j++){
//需要比较minIndex索引 处的值与j索引处的值
if(greater(a[minIndex],a[j])){
minIndex = j;//更换索引值
}
}
//调用方法,交换最小元素所在索引minIndex处的值和索引i处的值
exch(a,i,minIndex);
}
}
/*
比较v元素是否大于w元素
*/
private static boolean greater(Comparable v,Comparable w){
return v.compareTo(w)>0;//v>w,就是>0
}
/*
交换数组元素i与j的索引位置
*/
private static void exch(Comparable[] a,int i,int j){
Comparable temp;//定义一个变量接收
temp = a[i];
a[i] = a[j];//直接交换
a[j] = temp;
}
}
主方法:
package com.wt.algorwt.test;
import com.wt.algorwt.sort.Selection;
import java.util.Arrays;
public class SelectionTest {
public static void main(String[] args) {
//测试的原数据
Integer[] a = {4,6,8,7,9,2,10,1};
Selection.sort(a);
System.out.println(Arrays.toString(a));
}
}
运行结果: