常见的排序算法有以上八种,所以预估会分成几期来讲,感兴趣的朋友们不妨点个收藏专栏。 ღ( ´・ᴗ・` )比心
选择排序
思想方法
选择排序就是不断取出最大或者最小的数,关键点在于选数的方法上,这里基于选数进行第一次优化。每次选出最大和最小的数。
其次,可以使用建堆的方式来选数,详细看这一篇 堆排序
动图演示
选择一个数:
图解分析
有这样一个数组,要求升序排列。
每次找出最大值和最小值,分别和end数和begin数进行交换。
注意点:此时maxi位于begin处,mini值和begin值交换的时候,maxi的值被改变了,所以需要对maxi进行修正。
然后++begin,–end,进入下一轮循环。
代码
void SelectSort(int* a, int n)
{
int begin = 0, end = n - 1;
while (begin < end)
{
int mini = begin, maxi = begin;
for (int i = begin; i <= end; ++i)
{
if (a[i] > a[maxi])
maxi = i;
if (a[i] < a[mini])
mini = i;
}
Swap(&a[begin], &a[mini]);
//修正maxi
if (begin == maxi)
{
maxi = mini;
}
Swap(&a[maxi], &a[end]);
++begin;
--end;
}
}