算法概论:鸡尾酒排序---冒泡排序的进化

鸡尾酒排序与冒泡排序

冒泡排序,单次排序,从小到大或从大到小,一遍过,代码简洁,但并不效率
鸡尾酒排序是冒泡排序的一种,又称为来回排序。它比冒泡排序要高级点,为何这么说呢
冒泡排序是先找最大,然后找第二大,然后一直找完
鸡尾酒排序是这样的,先找最大,再找最小,然后找第二大,再找第二小,依次类推,直至找不到了为止

举例,有数组[6, 4, 5, 1, 8, 7, 2, 3]
先从左到右两两比较并排序,直到8排到最右边
[4, 6, 5, 1, 8, 7, 2, 3]
[4, 5, 6, 1, 8, 7, 2, 3]
[4, 5, 1, 6, 8, 7, 2, 3]
[4, 5, 1, 6, 8, 7, 2, 3]
[4, 5, 1, 6, 7, 8, 2, 3]
[4, 5, 1, 6, 7, 2, 8, 3]
[4, 5, 1, 6, 7, 2, 3, 8]

然后再从右到左两两比较并排序,直到1排到最左边
[4, 5, 1, 6, 7, 2, 3, 8]
[4, 5, 1, 6, 7, 2, 3, 8]
[4, 5, 1, 6, 2, 7, 3, 8]
[4, 5, 1, 2, 6, 7, 3, 8]
[4, 5, 1, 2, 6, 7, 3, 8]
[4, 1, 5, 2, 6, 7, 3, 8]
[1, 4, 5, 2, 6, 7, 3, 8]

然后把7排到倒数第二
[1, 4, 5, 2, 6, 7, 3, 8]
[1, 4, 5, 2, 6, 7, 3, 8]
[1, 4, 2, 5, 6, 7, 3, 8]
[1, 4, 2, 5, 6, 7, 3, 8]
[1, 4, 2, 5, 6, 7, 3, 8]
[1, 4, 2, 5, 6, 3, 7, 8]

然后把二排到正数第二
[1, 4, 2, 5, 6, 3, 7, 8]
[1, 4, 2, 5, 6, 3, 7, 8]
[1, 4, 2, 5, 6, 3, 7, 8]
[1, 4, 2, 5, 3, 6, 7, 8]
[1, 4, 2, 3, 5, 6, 7, 8]
[1, 4, 2, 3, 5, 6, 7, 8]
[1, 2, 4, 3, 5, 6, 7, 8]
………………

依次类推,得到[1, 2, 3, 4, 5, 6, 7, 8]

有人会问什么时候结束,我们可以设置一个变量,如果有排序变化时,变量值改变,如果没有则不变,如果排序结束之后还没变,则表示排序已经是ok的了
下面,看一幅图:
算法概论:鸡尾酒排序---冒泡排序的进化_第1张图片
这就是鸡尾酒排序的运作方式。

#include
#include
 
using namespace std;
 
const int maxn=10;
 
int n,s[maxn];
 
void Cocktailsort()
{
    int left=0;
    int right=n-1;
    while(lefts[i+1]){
                swap(s[i],s[i+1]);
            }
        }
        right--;
        //后半轮,将最小元素放到前面
        for(int i=right;i>left;i--){
            if(s[i]

其算法复杂度接近O(n),效率非常高了
(以上c代码,java代码实在难以理解)

你可能感兴趣的:(轻松学算法,#,算法入门与进阶)