排序算法之一 选择排序

来源:互联网 发布:知乎 刘鑫 编辑:程序博客网 时间:2024/06/05 01:56

开始了对排序算法的学习,现在进行系统地整理一下。

说到排序,维基百科上面的解释是,排序算法(Sorting algorithm)是一种能将一串数据依照特定排序方式的一种算法。

对排序算法进行分析和评价,可以从时间复杂度(最差和平均)、空间复杂度和稳定度上面来进行。

当进行排序时,最容易想到的算法就是,遍历待排序的序列,找出最大值、次大值。。。,然后按照大小顺序进行重排。

这就是选择排序的思路。

为了说明方便,约定称待排序的无序序列为 d,元素个数为 n;排序后的结果为递增序列。

选择排序的原理为:选择 n 个元素之中的最小值放到第一个位置,然后在剩下的 (n-1)个元素中选择最大值放到第二个位置,以此类推,一直到剩下最后一个元素,也就是最大值了。

实施步骤如下:

  1. 首先,i = 0,对数组从 d[i] 到 d[n-1] 进行遍历,找出最大值,放到数组的第一个位置;
  2. 然后,i = i + 1,重复上一步;
  3. 最后,终止条件即 i = n - 1。

选择排序是一种非稳定的排序算法,时间复杂度(最差情况下)为O(n2)。

实现的C/C++代码如下:

void selectSort(double *dataIn, int sizeIn){/* 2012/08/23, by wbprime@myopera.com */        for (int i = 0; i < sizeIn; ++i) {        for (int j = i + 1; j < sizeIn; ++j) {            if (dataIn[i] > dataIn[j]  swap(dataIn[i], dataIn[j]);        }    }}

其中,swap函数用来交换两个变量的值。

void swap(double &a, double &b){/* 2012/08/23, by wbprime@myopera.com */    double temp = a;    a = b;    b = temp;}