3分钟学算法.02.选择排序

1.核心思想

把数组从第1项开始,假设第一个数为最小值,依次与后项对比,记下较小数的索引,遍历结束后得到最小项的索引,将首项与最小项对换。
从第2项开始,依次…
从第n-1项开始…
划重点!其实就是内外俩循环!

2.代码实现

先附上一个好用的在线Java编译工具:https://www.jdoodle.com/online-java-compiler/

//java
import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        selectionAlgo();
    }
    
    public static void selectionAlgo(){
		int[] array = {3,4,5,2,1};
		System.out.println("排序前:"+Arrays.toString(array));
		
		for(int i = 0 ; i < array.length-1; i++){
			int minPosition = i;
			for(int j = i; j < array.length; j++){
				minPosition = array[minPosition] > array[j] ? j : minPosition;  
			}
			changePosition(array, i, minPosition);
		}
		
       System.out.println("排序后:" + Arrays.toString(array));
	}

	public static void changePosition(int[] array, int small , int big){
		int temp = array[big];
		array[big] = array[small];
		array[small] = temp;
	}
	
}

附上数组的打印方式,我估计很多小伙伴都忘了怎么打印。

  1. 经典for循环方式
for(int i = 0 ; i < array.length ; i++){
   System.out.println(array[i]);
}
  1. 高级foreach方式
for(int i : array){
   System.out.println(array[i]);
}
  1. 调包侠
import java.util.Arrays;

System.out.println(Arrays.toString(array));

3.性能分析

时间复杂度:
从第1个开始遍历,两两对比,标记较小数的索引为minPosition,时间复杂度:n
从第2个数开始遍历,两两对比,标记较小数的索引为minPosition,时间复杂度:n-1

直到第n-1个数,时间复杂度:1
总的时间复杂度O = n+(n-1)+(n-2)+…+2+1=n*n - n(n - 1)/2(其实就是等差数列和公式) = n²/2 - n/2 ≈ n² , 即O(n²)。

空间复杂度:
由于选择排序过程中没有增加新数组或其他空间开销,因此空间复杂度为S(1)。

稳定性1 :
遇到相同的数,还是可能会交换,因此它是不稳定算法

欢迎学习下一篇《3分钟学算法.03.冒泡排序》


  1. 排序算法的稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,则称这种排序算法是稳定的;否则称为不稳定的。 ↩︎

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值