主要测试代码:
int
main(
void
)
{
PrintDesc();
// cal_time(p_func_arr, ARRAY_SIZE(p_func_arr));
clock_t t_start; /* start time when test starts */
clock_t t_end; /* end time when test ends */
t_start = clock(); /* get start time */
int k = 0 ;
while (k ++< ForTimes)
{
int * array = get_ran();
Sort(array);
}
t_end = clock(); /* get end time */
printf( " 数据量:%d ,循环次数:%d ,平均排序时间: %.3f s\n " , ArraySize,ForTimes,( double )(t_end - t_start) / (CLOCKS_PER_SEC * ForTimes));
return 0 ;
}
{
PrintDesc();
// cal_time(p_func_arr, ARRAY_SIZE(p_func_arr));
clock_t t_start; /* start time when test starts */
clock_t t_end; /* end time when test ends */
t_start = clock(); /* get start time */
int k = 0 ;
while (k ++< ForTimes)
{
int * array = get_ran();
Sort(array);
}
t_end = clock(); /* get end time */
printf( " 数据量:%d ,循环次数:%d ,平均排序时间: %.3f s\n " , ArraySize,ForTimes,( double )(t_end - t_start) / (CLOCKS_PER_SEC * ForTimes));
return 0 ;
}
测试结果:
1. 冒泡排序
----------
CL
----------
[冒泡排序]
数据量: 1000 ,循环次数: 100 ,平均排序时间: 0.007 s
数据量: 10000 ,循环次数: 100 ,平均排序时间: 0.659 s
[冒泡排序]
数据量: 1000 ,循环次数: 100 ,平均排序时间: 0.007 s
数据量: 10000 ,循环次数: 100 ,平均排序时间: 0.659 s
输出完成 (耗时: 0 秒)
当测试100000数据量的时候就很慢了,我等到3分钟的时候已经等不下去了,直接CUTE掉了(因为这里是十万数据*100次循环==千万数据了)
冒泡排序是最慢的排序算法。在实际运用中它是效率最低的算法。它通过一趟又一趟地比较数组中的每一个元素,使较大的数据下沉,较小的数据上升。时间复杂度O(n2)。 小数据量时使用。
2.插入排序
----------
CL
----------
[插入排序]
数据量: 1000 ,循环次数: 100 ,平均排序时间: 0.002 s
数据量: 10000 ,循环次数: 100 ,平均排序时间: 0.190 s
输出完成 (耗时: 0 秒)
[插入排序]
数据量: 1000 ,循环次数: 100 ,平均排序时间: 0.002 s
数据量: 10000 ,循环次数: 100 ,平均排序时间: 0.190 s
输出完成 (耗时: 0 秒)
时间复杂度O(n2),小数据量时使用。
3. 选择排序
---------- CL ----------
[选择排序]
数据量: 1000 ,循环次数: 100 ,平均排序时间: 0.003 s
数据量: 10000 ,循环次数: 100 ,平均排序时间: 0.282 s
输出完成 (耗时: 0 秒)
数据量: 1000 ,循环次数: 100 ,平均排序时间: 0.003 s
数据量: 10000 ,循环次数: 100 ,平均排序时间: 0.282 s
输出完成 (耗时: 0 秒)
时间复杂度O(n2),小数据量时使用。
4. 快速排序
----------
CL
----------
[快速排序]
数据量: 10000 ,循环次数: 100 ,平均排序时间: 0.003 s
数据量: 100000 ,循环次数: 100 ,平均排序时间: 0.037 s
数据量: 1000000 ,循环次数: 100 ,平均排序时间: 0.420 s
输出完成 (耗时: 0 秒)
[快速排序]
数据量: 10000 ,循环次数: 100 ,平均排序时间: 0.003 s
数据量: 100000 ,循环次数: 100 ,平均排序时间: 0.037 s
数据量: 1000000 ,循环次数: 100 ,平均排序时间: 0.420 s
输出完成 (耗时: 0 秒)
实际应用中用的最多的,也是最常见的一种排序方法,其主要思想是用了分治法
时间复杂度O(nlogn)
5. 归并排序
----------
CL
----------
[归并排序]
数据量: 10000 ,循环次数: 100 ,平均排序时间: 0.005 s
数据量: 100000 ,循环次数: 100 ,平均排序时间: 0.056 s
输出完成 (耗时: 0 秒)
[归并排序]
数据量: 10000 ,循环次数: 100 ,平均排序时间: 0.005 s
数据量: 100000 ,循环次数: 100 ,平均排序时间: 0.056 s
输出完成 (耗时: 0 秒)
数据到达百万的时候会自己CUTE掉
时间复杂度O(nlogn)