算法笔记(四) 鸡尾酒排序

来源:互联网 发布:淘宝ifashion代表什么 编辑:程序博客网 时间:2024/05/16 07:17

请尊重本人的工作成果,转载请留言,并说明转载地址,谢谢。地址如下:

http://blog.csdn.net/fukainankai/article/details/37505607


鸡尾酒排序,也就是定向冒泡排序鸡尾酒搅拌排序搅拌排序 (也可以视作选择排序的一种变形), 涟漪排序来回排序 or 快乐小时排序, 是冒泡排序的一种变形。此算法与冒泡排序的不同处在于排序时是以双向在序列中进行排序。


鸡尾酒排序的思路与冒泡排序很像,只不过它在冒泡排序上有一点点小的变动,当查找完毕一个最大值后,它会反过来查找一次最小值。表面看起来,似乎和冒泡排序没什么区别,但实际上,这种方法,在大多数数据有序的情况下,使得排序效率很高。


下面是演示程序中,预计算的实现代码:

void CocktailSort::Start(){int *pData = new int[m_nCount];memcpy(pData, m_pData, m_nCount*sizeof(int));m_algSteps.clear();int nLeft = 0;int nRigtht = m_nCount-1;bool bSwap = true;while (bSwap){bSwap = false;for (int j=nLeft; j<nRigtht; j++){if (pData[j] > pData[j+1]){Swap(j,j+1, pData);bSwap = true;}}nRigtht--;for (int j=nRigtht; j>nLeft; j--){if (pData[j] < pData[j-1]){Swap(j, j-1, pData);bSwap = true;}}nLeft++;}m_nCurStep = 0;}

如有错误,欢迎大家指正,也希望得到大家的建议。


参考资料:http://zh.wikipedia.org/wiki/%E9%B8%A1%E5%B0%BE%E9%85%92%E6%8E%92%E5%BA%8F

0 0