选择排序思想:以从小到大排序为例。第一趟,从数组中找出最小值,并记录最小值的下标,让最小值与数组下标为0的元素交换位置。第二趟,刨除数组下标为0的元素,在剩下的元素中找出最小值,并记录最小值的下标,与数组下标为1的元素交换位置。以此类推,如果要对n个数排 序,n-1趟即可让数组有序。
例.一组数{67, 42, 88, 16, 25, 3},对其按从小到大的顺序排列。
public static void main(String[] args) {
//需求:有如下一组数{67, 42, 88, 16, 25, 3},对其按从小到大的顺序排列。
//分析:
//1.创建一个数组保存上述数据
//2.定义变量index保存最小值的下标。
//3.使用选择排序法进行排序
//原始数据 67 42 88 16 25 3------一共6个数据,共比较5趟
//第1趟,一共比较5次 假定下标为0的元素是最小值。即index初始值是0
// 第1次 67 42 88 16 25 3 下标为1的和下标为index的比较,下标为1的 更小,将index更新为1
// 第2次 67 42 88 16 25 3 下标为2的和下标为index的比较,下标为 index比较小,不更新index
// 第3次 67 42 88 16 25 3 下标为3的和下标为index的比较,下标为3的 更小,将index更新为3
// 第4次 67 42 88 16 25 3 下标为4的和下标为index的比较,下标为 index比较小,不更新index
// 第5次 67 42 88 16 25 3 下标为5的和下标为index的比较,下标为5的 更小,将index更新为5
// 第1趟结束后,最小的元素已经找到,即下标为5的元素,让下标为5的元素和下标为0的 元素交换位置。
// 3 42 88 16 25 67---最小值就找出来了。最小值不再参与下一趟比 较。
//第2趟,一共比较4次 假定下标为1的元素是最小值。即index初始值是1
// 第1次 3 42 88 16 25 67 下标为2的和下标为index的比较,下标为 index比较小,不更新index
// 第2次 3 42 88 16 25 67 下标为3的和下标为index的比较,下标为3的 更小,将index更新为3
// 第3次 3 42 88 16 25 67 下标为4的和下标为index的比较,下标为 index比较小,不更新index
// 第4次 3 42 88 16 25 67 下标为5的和下标为index的比较,下标为 index比较小,不更新index
// 第2趟结束后,第二小的元素已经找到,即下标为3的元素,让下标为3的元素和下标为1 的元素交换位置。
// 3 16 88 42 25 67---最小值和次小值就找出来了。二者不再参与下一 趟比较。
//第3趟,一共比较3次 假定下标为2的元素是最小值。即index初始值是2
// 第1次 3 16 88 42 25 67 下标为3的和下标为index的比较,下标为3的 更小,将index更新为3
// 第2次 3 16 88 42 25 67 下标为4的和下标为index的比较,下标为4的 更小,将index更新为4
// 第3次 3 16 88 42 25 67 下标为5的和下标为index的比较,下标为 index比较小,不更新index
// 第3趟结束后,第三小的元素已经找到,即下标为4的元素,让下标为4的元素和下标为2 的元素交换位置。
// 3 16 25 42 88 67---最小的3个数就找出来了。三者不再参与下一趟 比较。
//第4趟,一共比较2次 假定下标为3的元素是最小值。即index初始值是3
// 第1次 3 16 25 42 88 67 下标为4的和下标为index的比较,下标为 index比较小,不更新index
// 第2次 3 16 25 42 88 67 下标为5的和下标为index的比较,下标为 index比较小,不更新index
// 第4趟结束后,第四小的元素已经找到,即下标为3的元素,让下标为3的元素和下标为3 的元素交换位置。
// 3 16 25 42 88 67---最小的4个数就找出来了。四者不再参与下一趟 比较。
//第5趟,一共比较1次 假定下标为4的元素是最小值。即index初始值是4
// 第1次 3 16 25 42 88 67 下标为5的和下标为index的比较,下标为5的 更小,将index更新为5
// 第5趟结束后,第五小的元素已经找到,即下标为5的元素,让下标为5的元素和下标为4 的元素交换位置。
// 3 16 25 42 67 88---至此,数据全部有序。
int[] array = {67, 42, 88, 16, 25, 3};
for(int i = 0; i < array.length - 1; i++) {
int index = i;
for(int j = i + 1; j < array.length; j++) {
if(array[j] < array[index]) {
index = j;
}
}
int temp = array[index];
array[index] = array[i];
array[i] = temp;
}
for(int i = 0; i < array.length; i++) {
System.out.print(array[i] + " ");
}
System.out.println();
}
选择排序的写法很固定:
for(int i = 0; i < 数组名.length - 1; i++){
int index = i;
for(int j = i + 1; j < 数组名.length; j++){
if(数组名[j] < 数组名[index]){
index = j;
}
}
数据类型 temp = 数组名[i];
数组名[i] = 数组名[index];
数组名[index] = temp;
}