思想:
对于一组无序数字,每次选出一个最大值,将最大值放在当前无序数组的最后。
选最大值的方法:定义一个最大值的下标,将初始最大值与当前无序数组中的数字依次比较,若遇到更大的值,最大值的下标改变,直到当前无序数组结束,将最大值与当前无序数组的最后一个元素交换位置,把最大值交换到后面。
具体实现:
- 遍历初始数组
- 定义一个最大值的下标
- 遍历当前无序数组,遇到比最大值大的元素,将最大值下标改为该元素下标
- 遍历完当前无序数组后,将当前无序数组最后一个元素与最大值交换位置,即将最大值交换到最后。
实例理解:
给定一组数字:9,2,5,7,3,8,3,6,1
代码实现:
package www.fanfan.com;
import java.util.Arrays;
/**
* author:kelly_fanfan
*/
public class Code_选择排序 {
public static void main(String[] args) {
int[] array = {9,2,5,7,3,8,3,6,1};
selectSort(array);
System.out.println(Arrays.toString(array));
}
public static void selectSort(int[] array){
//1,遍历原数组
for (int i = 0; i < array.length;i++){
//2,定义最大值的下标
int max = 0;
//3,遍历当前无序数组
for (int j = 1;j < array.length-i;j++){
if(array[j] >= array[max]){
max = j;
}
}
//4,将当前无序数组中的最大数与最后一个元素的位置交换
int t = array[array.length-1-i];
array[array.length-1-i] = array[max];
array[max] = t;
}
}
}