【发布时间】:2016-02-18 13:22:04
【问题描述】:
我正在尝试编写选择排序和插入排序的实现。并使用自动生成的数组对它们进行测试,并使用 Posix gettimeofday 以 u 秒精度评估耗时,低于 MAC OS。
但在大多数情况下,总共有65525 和范围从-65525 和+65525 输入数组,插入排序比选择排序快得多,大约一半时间。
实现见下文:
void selectionSort (vector<int>& ns) {
uint_t j, minInd;
for (uint_t i = 0; i< ns.size() - 1; i++) {
j = i + 1;
minInd = i;
while (j < ns.size()) {
if(ns[j] < ns[minInd])
minInd = j;
j++;
}
if (minInd != i) {
int tmp = ns[minInd];
ns[minInd] = ns[i];
ns[i] = tmp;
}
}
}
insertSort (vector<int>& ns){
for(int i = 1; i < (int)ns.size(); i++) {
int key = ns[i];
int j = i - 1;
for( ; j >= 0; j--) {
if (ns[j] > key ) {
ns[j+1] = ns[j];
} else {
break;
}
}
ns[j+1] = key;
}
}
一些测试结果:
插入排序:
最小值=(-65524),索引=(89660);最大值=(62235),索引=(23486) ShowSysTime 毫秒:1447749079447950,上一条记录的差异时间:20092583 最小值=(-65524),索引=(0);最大值=(62235),索引=(131050)
选择排序:
最小值=(-65524),索引=(89660);最大值=(62235),索引=(23486) ShowSysTime 毫秒:1447749114384115,上一条记录的差异时间:34934768 最小值=(-65524),索引=(0);最大值=(62235),索引=(131050)
插入排序来自书 ITA,所以我怀疑我的选择排序有什么不正确的地方。
【问题讨论】:
-
根据定义,选择排序几乎比插入排序慢,所以这并不令人意外,表明有问题,但在意料之中。
-
@harold 。就连我也是来写这个的。你打败了我:P
标签: algorithm sorting insertion-sort selection-sort