算法思路:
算法研究中,经常被使用的一个原则是:结合算法A提供一个正向思路解决这个问题
算法B提供一个逆向思路解决这个问题
那算法A和算法B结合起来,是否能更好的解决这个问题呢?很多情况下,使用已有的方法进行结合,相对于重新创建一个新方法来说,要容易一些。
结合不是堆砌,而是需要对各个算法进行透彻研究,进而找到结合点
冒泡算法两种遍历方式的结合点是?-----待排序列的起始与结束位置
鸡尾酒算法:
思路:一次遍历找最小值;
接着逆向遍历,找最大值
void CockTail(int A[],int num)
{
int i, j;
inttail=num-1;
inttemp=0;
for(int i=0;i<tail;)
{
for(int j=tail;j>i;j--)
{
if(A[j]<A[j-1])
{
temp=A[j];
A[j]=A[j-1];
A[j-1]=temp;
}
}
i++;
for(int j=i;j<tail;j++)
{
if(A[j]>A[j+1])
{
temp=A[j];
A[j]=A[j+1];
A[j+1]=temp;
}
}
tail--;
}
}