排序算法3---选择排序

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

选择排序

基本思想每一趟(例如第i趟,i=0,1,…,n-2)在后面n-i个待排序的数据元素集合中选出关键码最小的数据元素,作为有序元素序列的第i个元素,待到第n-2趟做完,待排序元素集合中只剩 下1个元素,排序结束。
时间复杂度: O(n^2)
空间复杂度: O(1)
稳 定 性 :不稳定
适用场景:数据量较小,交换次数比较少

我们首先来看第一个版本

选择排序(单边缩小空间)
基本思想:我们定义一个maxIndex来标记区间内最大值的下标,第一次遍历完数组后,更新maxIndex的指向,与下标为end(最后一个元素)的元素交换,end–缩小空间,继续遍历更新maxIndex。
代码:

void SelectSort(int* arr, int size)
{
 if (arr == NULL || size <= 0)
   return;
 for (int end = size - 1; end > 0; --end)
 {
   int maxIndex = end;//最大下标
   for (int idx = 0; idx < end; ++idx)
   {
     //比最大的元素还大,更新最大下标
     if (arr[idx] > arr[maxIndex])
       maxIndex = idx;
   }
   //交换end与最大元素的值
   std::swap(arr[maxIndex], arr[end]);
 }
}

这个算法还可以优化,我下个博客再写。

猜你喜欢

转载自blog.csdn.net/shanghx_123/article/details/83189290