开始了对排序算法的学习,现在进行系统地整理一下。
说到排序,维基百科上面的解释是,排序算法(Sorting algorithm)是一种能将一串数据依照特定排序方式的一种算法。
对排序算法进行分析和评价,可以从时间复杂度(最差和平均)、空间复杂度和稳定度上面来进行。
当进行排序时,最容易想到的算法就是,遍历待排序的序列,找出最大值、次大值。。。,然后按照大小顺序进行重排。
这就是选择排序的思路。
为了说明方便,约定称待排序的无序序列为 d,元素个数为 n;排序后的结果为递增序列。
选择排序的原理为:选择 n 个元素之中的最小值放到第一个位置,然后在剩下的 (n-1)个元素中选择最大值放到第二个位置,以此类推,一直到剩下最后一个元素,也就是最大值了。
实施步骤如下:
- 首先,i = 0,对数组从 d[i] 到 d[n-1] 进行遍历,找出最大值,放到数组的第一个位置;
- 然后,i = i + 1,重复上一步;
- 最后,终止条件即 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;
}