排序之选择排序

选择排序基本思想如下图:
在这里插入图片描述

  1. 首先要定义一个最小的索引值用来标记每一次比较后较小值的位置,例如minIndex;
  2. 第一步用第一个值和后面的值一次做比较,例如7要比6大,所以minIndex=1,
  3. 然后6比9小所以继续往后比较此时minIndex的值不变
  4. 6比5大,所以minIndex=3
  5. 5和11比不变
  6. 5比3大所以minIndex=5
  7. 3比1大所以minIndex=6
  8. 1比9小所以minIindex不变
  9. 7和1 交换位置
    10.这是一步的过程
public void selectSort(int[] arr){
	if(arr == null || arr.length == 0){
		return;
	}
	//这一步是用来用每一个数和后面的数进行比较用的
	for(int i = 0; i < arr.length - 1; i++){
		int minIndex = i;//用来标记比较之后最小的值得索引
		for(int j = i + 1; j < arr.length; j++){//第i个位置的值要和后面的比较所以+1,
			minIndex = arr[j] < arr[minIndex] ? j : minIndex;//如果后面的数也就是j位置的数要比上次比较的第minIndex位置的数还小,那么就将j赋值给minIndex,使其成为更小的值,否则不变
		}
		//交换
		int temp = arr[i];
		arr[i] = arr[minIndex];
		arr[minIndex] = temp;
	}
}

因为有两层for循环,所以时间复杂度最终为O(n*n);
空间复杂度为O(1)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值