鸡尾酒排序算法(java)

欢迎关注WX公众号:
门徒与思索
鸡尾酒排序算法(java)

####文章链接

知识点

1、鸡尾酒排序算法介绍;
2、算法的实现java;

概述

鸡尾酒算法:就是把一组数字,分别向前和向后将每个最大(最小)的数字分别往前后推。每一次推的结果一定是,最大(最小)的一定会在最前或者最后。

算法实现


//示例入参数组; src = {5,2,4,1,3}
public int[] cocktail_sort(int[] src){
    long timeS = System.currentTimeMillis();
    //该算法是只需要向左或右推数组长度的一半次数就够了
    for (int i = 0; i < src.length / 2; i++){
        //第一个for循环是将数组中最大的数,向最后推。结果最大的数总会在最右边
        //例如上面的数组
        //第一次:5因为最大,所以在执行下面循环之后,一定位于数组最后面。(以此类推,第二次,是4最大,会位于5的前面)
        for (int j = i; j < src.length - i - 1; j++){
            if (src[j] > src[j + 1]){
                int temp = src[j];
                src[j] = src[j + 1];
                src[j + 1] = temp;
            }
            System.out.println("swap biggest number : " + Arrays.toString(src));
        }
        //第二个循环是将数组中最小的数,往最前面推。结果最小的数总会在最右边
        //例如上面的数组
        //第一次往右,1是最小,循环执行完毕后,1一定位于数组最前面。(类似地,第二次就会把第二小的数字2,向左推到1的后面)
        for (int j = src.length - 1 - (i + 1); j >= i; j--){
          if (src[j] > src[j + 1]){
              int temp = src[j];
              src[j] = src[j + 1];
              src[j + 1] = temp;
          }
            System.out.println("swap smallest number : " + Arrays.toString(src));
        }
        //当执行完一轮循环之后,向右和向左推的数就不会再参与下一轮的循环了,不然就浪费资源了。
    }
    long timeE = System.currentTimeMillis();
    System.out.println("take time = " + (timeE - timeS));
    System.out.println("final result : " + Arrays.toString(src));
    return src;
}

在as中使用单元测试,如下:


@Test
public void sortTest() {
    aaa a = new aaa();
    int[] src = new int[]{11,4,3,54,2,32,45,23,55,15,28,99,100,92,22};
    a.cocktail_sort(src);
}

最后的结果是:


swap smallest number : [2, 3, 4, 11, 15, 22, 23, 28, 32, 45, 54, 55, 92, 99, 100]
swap biggest number : [2, 3, 4, 11, 15, 22, 23, 28, 32, 45, 54, 55, 92, 99, 100]
swap biggest number : [2, 3, 4, 11, 15, 22, 23, 28, 32, 45, 54, 55, 92, 99, 100]
swap smallest number : [2, 3, 4, 11, 15, 22, 23, 28, 32, 45, 54, 55, 92, 99, 100]
swap smallest number : [2, 3, 4, 11, 15, 22, 23, 28, 32, 45, 54, 55, 92, 99, 100]
take time = 31
final result : [2, 3, 4, 11, 15, 22, 23, 28, 32, 45, 54, 55, 92, 99, 100]

Process finished with exit code 0


总结

鸡尾酒排序是一个定向的冒泡排序,是双向的排序。其最糟或者平均所花费的次数是O(n^2)。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值