排序算法之选择排序

定义:

选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法(比如序列[5, 5, 3]第一次就将第一个[5]与[3]交换,导致第一个5挪动到第二个5后面)。(摘自百度百科)

原理:

假设给定数组int arr = {数据有n个}。

第一趟从arr[0]~arr[n-1]中选取最小值与arr[0]交换;
第二趟从arr[1]~arr[n-1]中选取最小值与arr[1]交换;
第三趟从arr[2]~arr[n-1]中选取最小值与arr[2]交换;
......
第i趟从arr[i-1]~arr[n-1]中选取最小值与arr[i-1]交换;
第n-1趟从arr[n-2]~arr[n-1]中选取最小值与arr[n-2]交换。

总共通过n-1次,得到一个按照从小到大的有序序列。

图解:

这里写图片描述

代码实现:

static void selectSort(int[] arr) {
	int temp = 0;
	for (int i = 0; i < arr.length - 1; i++) {
		int minIndex = i; // 假设最小值的下标索引为 i
		for (int j = i + 1; j < arr.length; j++) {
			if (arr[minIndex] > arr[j]) { // 证明arr[minIndex]并不是最小值
				minIndex = j;
			}
		}
		//在内层循环中,找到最小的数后,再进行交换
		if (minIndex != i) { 
			temp = arr[i];
			arr[i] = arr[minIndex];
			arr[minIndex] = temp;
		}
	}
}

测试:

public static void main(String[] args) {
	int[] arr = { 4,2,-1,8,1};
	selectSort(arr);
	System.out.println(Arrays.toString(arr));
}

结果:

[-1, 1, 2, 4, 8]

算法分析:

选择排序的复杂度分析。第一次内循环比较N-1次,第二次比较N-2次,然后N-3次,N-4次,…,最后一次是1次。一共比较:(N - 1) + (N - 2) + ... + 1,等差数列求和得:N(N-1)/2次。

由此我们发现不管是怎样的一组数列,比较的次数永远都是N(N-1)/2次,而交换的次数与数列的初始循序就有关了,数列为正序时:交换次数为0。

所以,简单选择排序的时间复杂度为:O(N^2)。

--------------------------------------------------------------------------------------------------------------------------------------------如果有什么不对的地方,望批评指出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值