排序问题 优化冒泡排序

项目中经常用到排序问题,我们常常用到一些排序算法,例如已有的冒泡排序,快速排序,二分法,归并排序,堆排序等等,有些排序例如归并排序非常适合用在数据量非常庞大的情况中,而我们项目一些数量较少的排序,可能很多人就简单用个冒泡排序就完了,因为数据少的情况下冒泡排序没有比其他排序慢很多,而我们接触排序时,往往会先熟悉冒泡排序。

我在项目中接触了排序算法,计划优化项目中的算法时,对已成熟的算法都了解了一下。算法的优劣就是看它遍历的过程经过了多少次,如果n是队列的长度,冒泡排序就遍历对比了n的n次方次,已经是最长的一种算法了。后来我自己有了排序的一些想法,通过简单修改冒泡排序,而整理出一种经过优化过的冒泡排序,我叫它整体冒泡。


    public void bubbleSort(int[] data) {
        for (int i = data.length - 1, j, jIndex; i > 0; i -= jIndex) {
            for (jIndex = 0, j = 0; j < i; j++) {
                sendMsg(data.clone(), j + 1, j - jIndex, j);
                if (data[j + 1] < data[j - jIndex]) {
                    swapHeader(data, j + 1, j - jIndex);
                } else {
                    swapList(data, j + 1, jIndex);
                    jIndex++;
                }
            }
        }
        sendMsg(data.clone());
    }

    public void swapList(int[] data, int i, int jIndex) {
        for (int j = 0; j < jIndex; j++, i--) {
            sendMsg(data.clone(), i, i - 1);
            if (data[i] < data[i - 1]) {
                swap(data, i, i - 1);
            } else {
                return;
            }
        }
    }

    public void swapHeader(int[] data, int max, int min) {
        int temp = data[max];
        for (; max > min; max--) {
            data[max] = data[max - 1];
        }
        data[min] = temp;
    }

整体冒泡的过程就是在冒泡排序的基础上,在数据头对比数据时,如果大于对比数据就将数据排序出来,再整体后移一位,直到最终整个数据排序完毕。整体冒泡在速度上比冒泡排序快了三倍左右。

 


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值