排序算法——选择排序

排序算法作为最基本也是最常用的算法,是我们必须要掌握的内容。

本文从比较基础的选择排序算法开始,进行排序算法的介绍。

思想

选择排序,顾名思义,就是从一组总数为n的无序数组中,进行一次遍历,选择出最小(最大)的一个,把它交换到数组的第0个位置。然后不断重复该操作,直到最后两个数。

在第 i 次选择开始时,当前分为有序区 R1 [ 0 .. i -1] 和无序区R2 [ i ... n]。从位置 [ i ] 开始,到数组末尾为止,选择出最小(最大)的一个,把它交换到数组的第[ i ]个位置。

交换之后,有序区R1变为 [ 0 .. i ],无序区R2变为[i + 1 .. n]。即索引位置向后移一位。

代码

#include <iostream>

#define SIZE 10
using namespace std;

int main()
{
    int numArray[SIZE] = {5,2,9,6,1,8,10,3,4,7};

    for(int i=0; i<SIZE-1; i++)
    {
        int minNum = numArray[i];
        int temp = 0;
        int index = i;
        for(int j=i+1; j<SIZE; j++)
        {
            if(numArray[j] < minNum)
            {
                minNum = numArray[j];
                index = j;
            }
        }
        temp = numArray[i];
        numArray[i] = numArray[index];
        numArray[index] = temp;
    }

    for(int m=0; m<SIZE; m++)
    {
        cout << numArray[m] << " ";
    }
    return 0;
}

分析

由于只剩下两个数的时候,就已经比较出了大小,并依照排序方式进行了交换。所以当把倒数第二个数比较完之后,就已经得到了最终的结果,没有必要把 i 加到数组的最后一位。在代码中体现的就是i < SIZE -1。

由于总的比较次数 N = (n -1) + (n -2) + ... + 1 = n * (n -1) /2 , 所以时间复杂度是O( n ^ 2 )。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值