【排序】图解选择排序

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_27124771/article/details/83856777

一、思想

首先,找到数组中最小的那个元素,其次,将它和数组的第一个元素交换位置(如果第一个元素就是最小元素那么就和自己交换)。在剩下的元素中找到最小的元素,将它与数组的第二个元素交换位置。如此往复,直到将整个数组排序。这种方法叫做选择排序,因为它在不断地选择剩余元素之中的最小者。

二、图解过程

选择排序

三、核心代码

//选择排序算法
public static void selectionSort(int[] arr) {
	//不满足交换条件
	if (arr == null || arr.length < 2) {
		return;
	}
	for (int i = 0; i < arr.length - 1; i++) {
		//寻找当前循环最小元素的下标
		int minIndex = i;
		for (int j = i + 1; j < arr.length; j++) {
			minIndex = arr[j] < arr[minIndex] ? j : minIndex;
		}
		swap(arr, i, minIndex);
	}
}
//交换数组中的两个元素
public static void swap(int[] arr, int i, int j) {
	int tmp = arr[i];
	arr[i] = arr[j];
	arr[j] = tmp;
}

四、复杂度分析

1、时间复杂度:O(N^2)

若待排序的元素总数为N,第一次内循环比较N-1次(与除了本身的所有元素进行比较,找出最值),第二次内循环比较N-2次,以此类推,最后一次内循环比较1次。总共比较(N-1) + (N-1) + ... + 1次,等差求和,时间复杂度为O(N^2)

2、额外空间复杂度:O(1)

未借助其它辅助空间。

完整源代码

猜你喜欢

转载自blog.csdn.net/qq_27124771/article/details/83856777
今日推荐