好久没发点有趣的东西了,今天发个来看看。
上个星期raven给了我一组有趣的统计图。跟大家分享下吧~
下面是对几种排序算法的性能的统计图。
x轴是输入数组的大小,从1000到10000;y轴是消耗的时间,单位为ms。
每条统计线所代表的排序算法如底部的图例所示。
每张图代表一种输入类型的状况。
Sorted表示输入是已经排好序的(按照从小到大),
almost-sorted表示大约有20%的元素是不符合顺序的,
reverse表示顺序是颠倒的(按照从大到小排序),
random表示随机的输入。
看不到大图的请点击放大。
[img]http://rednaxelafx.iteye.com/upload/picture/pic/9808/e985119c-70ed-3eb1-8349-544df38f9984.jpg[/img]
[img]http://rednaxelafx.iteye.com/upload/picture/pic/9810/f52a965b-8688-3193-8d73-25db60841cc6.jpg[/img]
[img]http://rednaxelafx.iteye.com/upload/picture/pic/9812/c81beebc-e20d-31e7-9ff4-1f4aeabf3d8f.jpg[/img]
[img]http://rednaxelafx.iteye.com/upload/picture/pic/9814/59c5395c-808c-39d1-82c9-9b5a88785e8a.jpg[/img]
可以看到,有好几种排序算法在这个统一坐标上都看不出什么端倪(相对来说太快了……),
而selection sort则很稳定的呈现出平方级的增长。
把坐标轴重新设定一次,再看看状况如何:
(注释:
Shellsort-A采用的是Shell提出的数列,从floor(N/2)开始每次除以2;
Shellsort-B采用的是另一种数列,从floor(N/2)开始每次除以3。
Quicksort-A是采用输入数组在中间位置的元素为分隔点;
Quicksort-B是采用median-of-three为分隔点;
Quicksort-C是采用median-of-five为分隔点;
Quicksort-D是采用输入数组的实际中值为分隔点
)
[img]http://rednaxelafx.iteye.com/upload/picture/pic/9816/3dcb3329-6a45-3eef-870f-4ad0537c1f05.jpg[/img]
[img]http://rednaxelafx.iteye.com/upload/picture/pic/9818/22b6b230-b39f-3063-9bd4-19b009df854d.jpg[/img]
[img]http://rednaxelafx.iteye.com/upload/picture/pic/9820/4bd2e645-8c68-37a8-a74f-27677ca5a16d.jpg[/img]
[img]http://rednaxelafx.iteye.com/upload/picture/pic/9822/b03f5d84-fecb-3f2f-85f9-4810be660c5f.jpg[/img]
raven同学或许过段时间会把题目和代码都放出来吧。这家伙最近也是忙。
[i]更新:raven同学发帖了,[url]http://ravenex.iteye.com/blog/175557[/url]。要看源代码的去那里看……[/i]
统计实验是在这样的配置上:
Pentium 4 HT 3.20GHz
1GB DDR
JRE 1.6.0 update 3
不知道为什么,无论怎么调节实验次数的参数,出来的结果都会很“抖”。
我在我的老笔记本上也跑过这个实验,就一点都不“抖”,但是比这里的图要慢多了。
P.S. 统计图是用JFreeChart画的。呼,这库我2年前用得快吐血了……源码开放,文档要卖钱,这算盘打得真是响当当的。
上个星期raven给了我一组有趣的统计图。跟大家分享下吧~
下面是对几种排序算法的性能的统计图。
x轴是输入数组的大小,从1000到10000;y轴是消耗的时间,单位为ms。
每条统计线所代表的排序算法如底部的图例所示。
每张图代表一种输入类型的状况。
Sorted表示输入是已经排好序的(按照从小到大),
almost-sorted表示大约有20%的元素是不符合顺序的,
reverse表示顺序是颠倒的(按照从大到小排序),
random表示随机的输入。
看不到大图的请点击放大。
[img]http://rednaxelafx.iteye.com/upload/picture/pic/9808/e985119c-70ed-3eb1-8349-544df38f9984.jpg[/img]
[img]http://rednaxelafx.iteye.com/upload/picture/pic/9810/f52a965b-8688-3193-8d73-25db60841cc6.jpg[/img]
[img]http://rednaxelafx.iteye.com/upload/picture/pic/9812/c81beebc-e20d-31e7-9ff4-1f4aeabf3d8f.jpg[/img]
[img]http://rednaxelafx.iteye.com/upload/picture/pic/9814/59c5395c-808c-39d1-82c9-9b5a88785e8a.jpg[/img]
可以看到,有好几种排序算法在这个统一坐标上都看不出什么端倪(相对来说太快了……),
而selection sort则很稳定的呈现出平方级的增长。
把坐标轴重新设定一次,再看看状况如何:
(注释:
Shellsort-A采用的是Shell提出的数列,从floor(N/2)开始每次除以2;
Shellsort-B采用的是另一种数列,从floor(N/2)开始每次除以3。
Quicksort-A是采用输入数组在中间位置的元素为分隔点;
Quicksort-B是采用median-of-three为分隔点;
Quicksort-C是采用median-of-five为分隔点;
Quicksort-D是采用输入数组的实际中值为分隔点
)
[img]http://rednaxelafx.iteye.com/upload/picture/pic/9816/3dcb3329-6a45-3eef-870f-4ad0537c1f05.jpg[/img]
[img]http://rednaxelafx.iteye.com/upload/picture/pic/9818/22b6b230-b39f-3063-9bd4-19b009df854d.jpg[/img]
[img]http://rednaxelafx.iteye.com/upload/picture/pic/9820/4bd2e645-8c68-37a8-a74f-27677ca5a16d.jpg[/img]
[img]http://rednaxelafx.iteye.com/upload/picture/pic/9822/b03f5d84-fecb-3f2f-85f9-4810be660c5f.jpg[/img]
raven同学或许过段时间会把题目和代码都放出来吧。这家伙最近也是忙。
[i]更新:raven同学发帖了,[url]http://ravenex.iteye.com/blog/175557[/url]。要看源代码的去那里看……[/i]
统计实验是在这样的配置上:
Pentium 4 HT 3.20GHz
1GB DDR
JRE 1.6.0 update 3
不知道为什么,无论怎么调节实验次数的参数,出来的结果都会很“抖”。
我在我的老笔记本上也跑过这个实验,就一点都不“抖”,但是比这里的图要慢多了。
P.S. 统计图是用JFreeChart画的。呼,这库我2年前用得快吐血了……源码开放,文档要卖钱,这算盘打得真是响当当的。