算法是小白,所以本着小白精神来写排序,本排序系列均采用正序排序,可以使用一个统一的逆序方法。
什么是选择排序呢?从一个包含n个元素的数组A,索引分别为0,1,2...n-1,从中选出最小值Ak,跟在索引为0位置的元素交换,即Ak与A0交换位置,然后在剩下的n-1个元素中选出其中的最小值Ai,跟在索引为1位置的元素交换,即Ai与A1交换位置,直到元素只剩下一个为止。(PS.感觉好通俗)
public static void selectionSort(int[] array){
for(int i = 0; i < array.length-1; i++ ){
int min = i;
for (int j = i+1; j < array.length ; j++){
if (array[j]<array[min])
min = j;
}
if (min != i)
swap(array,i,min);
}
}
两层循环,外层用于确定每个位置应该放的元素,内层用于求出子数组的最小值。定义min的原因是为了我们能够记住最小值所在的索引位置。如果对求数组最大值和最小值熟悉的话,应该知道可以参考我的博文
java最值,以最小值为例。注意,外层循环,循环n-1次即可,内层循环要循环n-i次。
public static void swap(int[] array, int i, int j){
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
swap()方法,用来交换数组内的两个元素,此方法一直通用于排序系列。
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] array = {15,2,7,21,9,33,10};
for (int i = 0; i <array.length;i++){
System.out.print(array[i]+",");
}
System.out.println();
selectionSort(array);
for (int i = 0; i <array.length;i++){
System.out.print(array[i]+",");
}
}
主方法测试程序。