直接选择排序(Straight Select Sort)是一种典型的选择排序算法,通过不断选择序列中最大(小)的元素。
一、算法基本思想
(1)基本思想
直接选择排序的基本思想就是:不断从未排序队列中选择最大(小)的元素放到已排序队列队尾,直至所有元素都排好序。
(2)运行过程
直接选择排序算法的运作如下:
1、首先在原始序列中找到最小(大)元素,存放到排序序列的起始位置
2、再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
3)重复第二步,直到所有元素均排序完毕。
(3)示例
二、算法实现(核心代码)
C++实现:
void selection_sort(int arr[], int len) {int i, j, min;for (i = 0; i < len - 1; i++) {min = i;for (j = i + 1; j < len; j++)if(arr[min] > arr[j])min = j;swap(arr[i], arr[min]);} }
Java实现:
public void selection_sort(int[] arr) {int i, j, min, temp, len = arr.length;for (i = 0; i < len - 1; i++) {min = i;for (j = i + 1; j < len; j++)if (arr[min] > arr[j])min = j;temp = arr[min];arr[min] = arr[i];arr[i] = temp;} }
三、性能(算法时间、空间复杂度、稳定性)分析
直接选择排序平均时间复杂度为O(n^2);空间复杂度为O(1);是不稳定的排序算法。
原始序列: 21,25,49,25*,16,08
排序后:08,16, 21,25*,25,49
两个25的位置变化了,所以是不稳定的。