直接选择排序
基本思想
直接选择排序(Straight Select Sorting) 是一种简单的排序方法,它的基本思想是:每一次从待排序的数据元素中选出最小(或最大)的一个元素,通过交换存放在序列的起始位置(或最后一个位置),直到全部待排序的数据元素排完 。
排序过程
第一次从R[0]-R[n-1]中选取最小值(或最大值),与R[0]交换,第二次从R[1]-R[n-1]中选取最小值(或最大值),与R[1]交换,…,第i次从R[i-1]-R[n-1]中选取最小值(或最大值),与R[i-1]交换,…,第n-1次从R[n-2]-R[n-1]中选取最小值(或最大值),与R[n-2]交换,总共通过n-1次,得到一个按排序码从小到大(或从大到小)排列的有序序列。
这个算法也可以优化为在每次遍历数组寻找选择最值元素时,同时选出最大和最小的两个元素,然后进行交换,可以减少排序时间。
begin是需要遍历寻找最值元素的区间的第一个元素,end是需要遍历寻找最值元素的区间的最后一个元素,[begin, end]是一个闭区间,这个区间从[0, n-1]逐渐缩小至begin与end相遇,每次在区间内遍历,寻找最小元素下标min_index和最大元素下标max_index,以升序排序为例,然后将最小元素与区间内第一个元素交换,最大元素与区间最后一个元素进行交换,然后begin++,end–,直到begin与end相遇,此时即完成了整个数组的升序排序。
C语言代码实现
// 交换函数
void Swap(int* a