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

选择排序

基本思想每一趟(例如第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]);
 }
}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值