选择算法排序
伪代码
for i = 1 to A.length-1
min = i
for j = i+1 to A.length
if A[j] < A[min]
min = j
temp = A[i]
A[i] = A[min]
A[min] = temp
C语言实现
int len = maxNum;
int inum = 0;
for (int i = 0; i < len-1; i++){
int min = i;
for (int j = i+1; j < len; j++) {
if (A[j] < A[min])
min = j;
++inum;
}
int temp;
temp = A[i];
A[i] = A[min];
A[min] = temp;
}
执行结果
分别对100/1000/10000个数据进行排序。原始数据采用最糟糕的方式:逆序。执行10此排序算法取平均值。
a.100个数据:100, 99, 98, 97, 96, 95, 94, 93, 92, 91, 90, 89, 88,…
[0]exec time: 0.000017 sec, exec:step=4950
[1]exec time: 0.000017 sec, exec:step=4950
[2]exec time: 0.000017 sec, exec:step=4950
[3]exec time: 0.000017 sec, exec:step=4950
[4]exec time: 0.000016 sec, exec:step=4950
[5]exec time: 0.000017 sec, exec:step=4950
[6]exec time: 0.000017 sec, exec:step=4950
[7]exec time: 0.000017 sec, exec:step=4950
[8]exec time: 0.000016 sec, exec:step=4950
[9]exec time: 0.000017 sec, exec:step=4950
average time: 0.000017
b.1000个数据:1000, 999, 998, 997, 996, 995, 994, 993, 992, 991, 990, 989, 988, 987,
[0]exec time: 0.001904 sec, exec:step=499500
[1]exec time: 0.001642 sec, exec:step=499500
[2]exec time: 0.001428 sec, exec:step=499500
[3]exec time: 0.001263 sec, exec:step=499500
[4]exec time: 0.001237 sec, exec:step=499500
[5]exec time: 0.001190 sec, exec:step=499500
[6]exec time: 0.001196 sec, exec:step=499500
[7]exec time: 0.001152 sec, exec:step=499500
[8]exec time: 0.001158 sec, exec:step=499500
[9]exec time: 0.001181 sec, exec:step=499500
average time: 0.001335
c.10000个数据:10000, 9999, 9998, 9997, 9996, 9995, 9994, 9993, 9992,
[0]exec time: 0.139902 sec, exec:step=49995000
[1]exec time: 0.137477 sec, exec:step=49995000
[2]exec time: 0.140359 sec, exec:step=49995000
[3]exec time: 0.149347 sec, exec:step=49995000
[4]exec time: 0.147227 sec, exec:step=49995000
[5]exec time: 0.131519 sec, exec:step=49995000
[6]exec time: 0.174094 sec, exec:step=49995000
[7]exec time: 0.110892 sec, exec:step=49995000
[8]exec time: 0.152730 sec, exec:step=49995000
[9]exec time: 0.136375 sec, exec:step=49995000
average time: 0.141992
c.pow(10, 5)个数据:
root@ubuntu-14-10-server:# ./a.out 5 10
cal num:100000 averarg num:10
[0]exec time: 10.394296 sec, exec:step=704982704
[1]exec time: 11.703293 sec, exec:step=704982704
[2]exec time: 11.124986 sec, exec:step=704982704
[3]exec time: 11.135266 sec, exec:step=704982704
[4]exec time: 10.737425 sec, exec:step=704982704
[5]exec time: 10.679522 sec, exec:step=704982704
[6]exec time: 11.877711 sec, exec:step=704982704
[7]exec time: 10.613468 sec, exec:step=704982704
[8]exec time: 10.717554 sec, exec:step=704982704
[9]exec time: 10.764245 sec, exec:step=704982704
average time: 10.974777