常见排序算法流程分析及其实现代码(六)

119 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路

六、简单选择排序

1、执行流程

从无序序列中找出最小的元素与其第一个元素交换位置(也可以理解为放入有序序列中)

原始序列:49 38 65 97 76 13 27 49 (序列中有两个49,其中一个加粗加以区分并可以验证该排序算法稳定性)

1)选择出最小的元素13,与无序序列第一一个元素49交换

13  38 65 97 76 49 27 49

2)选择出最小的元素27,与无序序列第一个元素38交换

13 27  65 97 76 49 38 49

3)选择出最小的元素38,与无序序列第一个元素65交换

13 27 38  97 76 49 65 49

以此类推即可得出最终序列

2、执行代码

public class SelectSort {
	
	public static void sort(int num[], int n) {
		int i, j, k, temp;
		for(i = 0; i < n; i++) {
			k = i;
			for(j = i+1; j < n; j++) {
				if(num[k] > num[j]) {
					k = j;
				}
			}
			temp = num[i];
			num[i] = num[k];
			num[k] = temp;
			
			System.out.print("第"+(i+1)+"趟:");
			for(k = 0; k < num.length; k++) {
				System.out.print(num[k] + " ");
			}
			System.out.println();
		}
	}

	public static void main(String[] args) {
		int mynum[] = {49, 38, 65, 97, 76, 13, 27, 49};
		sort(mynum, mynum.length);	
	}
}

20200901123107941.png

3、性能分析

时间复杂度:O(n^2^) 空间复杂度:O(1) 稳定性:不稳定

以下是常见排序算法的时间复杂度、空间复杂度以及各个排序算法的稳定性:

排序算法时间复杂度空间复杂度稳定性
直接插入排序O(n^2^)O(1)稳定
折半插入排序O(n^2^)O(1)稳定
希尔排序O(n^1.3^)O(1)不稳定
冒泡排序O(n^2^)O(1)稳定
快速排序O(nlog2n)O(log2n)不稳定
简单选择排序O(n^2^)O(1)不稳定
堆排序O(nlog2n)O(1)不稳定
二路归并排序O(nlog2n)O(n)稳定
基数排序O(d(n+rd))O(rd)稳定