1.选择排序的实现
2.插入排序的实现
3.shell排序的实现
注意代码中h值的选取。
4.shuffling(随机算法)
问题描述:给定一组元素个数为N数组i,随机的重新安排每个元素的位置,要求每个元素出现在各个位置上的概率相等。
解(1):
思路:声明一个长度为N的double类型的数组j,生成N个随机变量依次赋给j中的元素。i数组与j数组中的值一一对应。对j数组进行排序,当j中元素的位置发生改变时,i中元素相应的位置也跟着改变。当数组j排序完成时,数组i的新顺序也就得到了。
解(2):
思路:依次遍历数组i中的各元素。当遍历到index为n的元素时,生成一个0-n的随机数x,然后将index为n的元素与index为x的元素互换。
实现:
5.Convex Hull(凸包问题)
问题描述:平面中有N个点,在这N个点中找出若干个点构成一个多边形,使得所有的点都包含在这个多边形中。
应用:
(1)两点中间存在障碍物阻挡,找两点中的最短路径。
(2)在平面上给定N个点,找出相距最远的两点。
首先要认识到两个事实:(1)N个点的凸包一定能按照逆时针的方向将所有在凸包上的点遍历一边。(2)设N个点中纵坐标值最小的点为A。则从A出发逆时针遍历凸包时,凸包上的点与A的连线与X轴所成的角度将慢慢变大。
得到解答所要解决的问题:
如何判断X->Y->Z是否为逆时针?
通过求下列矩阵的值,我们可以很轻松的进行判断。
实现:
解决方法的具体实现:
Algorithm Part I:ELEMENTARY SORTS
原文:http://blog.csdn.net/yao_wust/article/details/39457303