首页 > 代码库 > Algorithm Part I:ELEMENTARY SORTS

Algorithm Part I:ELEMENTARY SORTS

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