选择排序 (个人笔记)

选择排序思想:以从小到大排序为例。第一趟,从数组中找出最小值,并记录最小值的下标,让最小值与数组下标为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;

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值