选择排序算法的实现(Java 版)

选择排序算法的实现(Java 版)

原理

  • 将数组(链表)中的数据分为两个区间:已排序区间和未排序区间初始已排序区间没有元素

  • 选择排序每次会从未排序区间中找到最小(最大)的元素,将其放到已排序区间的末尾,保证已排序区间的数据一直有序。

  • 重复这个过程,直到未排序区间中元素只剩一个,算法结束。

图示

在这里插入图片描述

代码

public class SelectionSort {
	
	/**
	 * 将 int[] 进行排序(整数排序)
	 * <p>
	 * 升序
	 *
	 * @param a int[]
	 *
	 * @return int[]
	 */
	public static int[] sortAsc(int[] a) {
		for(int i = 0; i < a.length; i++) {
			for(int j = i + 1; j < a.length; j++) {
				int tmp = i;
				if(a[tmp] > a[j]) {
					tmp = j;
				}
				// 将待排序区找到的最小的元素与待排序区第一个元素交换
				exchange(a, i, tmp);
			}
		}
		return a;
	}
	
	/**
	 * 将 int[] 进行排序(整数排序)
	 * <p>
	 * 降序
	 *
	 * @param a int[]
	 *
	 * @return int[]
	 */
	public static int[] sortDesc(int[] a) {
		for(int i = 0; i < a.length; i++) {
			for(int j = i + 1; j < a.length; j++) {
				int tmp = i;
				if(a[tmp] < a[j]) {
					tmp = j;
				}
				// 将待排序区找到的最小的元素与待排序区第一个元素交换
				exchange(a, i, tmp);
			}
		}
		return a;
	}
	
	/**
	 * 交换方法,交换 int 数组中的元素(基本数据类型)
	 *
	 * @param array 数组
	 * @param a     下标一
	 * @param b     下标二
	 */
	private static void exchange(int[] array, int a, int b) {
		int tmp = array[a];
		array[a] = array[b];
		array[b] = tmp;
	}
	
}

分析

  • 外层循环表示循环的次数内层循环用来找出最大(最小)的元素

  • 将目标元素放到已排序区后(待排序区第一个)即可,不需要额外操作。

  • 排序算法中,传入的数组,和排序后返回的数组 是同一个,返回值不是必备的。

  • 找 目标元素是最费时的。

  • 注意:选择排序和直接插入排序两者直接插入排序要略优于选择排序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十⑧

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值