冒泡排序

作者: lvlvforever | 来源:发表于2017-11-28 23:40 被阅读7次

    1 基本原理

    我的理解是冒泡排序如同水中的气泡上浮一样,每次最大的元素浮到数组的最末端,每次排定一个元素。更加详细的请移步冒泡排序

    2 基本步骤

    1.比较相邻的元素,从第一对到最后一对,将较大的元素交换到一对的后面的元素。比如6 5,那么就交换为 5 6
    2.完成上一步后,数组末尾的元素是最大的元素,此元素已经排定的
    3.重复第一步,把最后一个元素忽略掉
    4.如果没有了交换或者所有元素都已排定则说明排序完成

    3 具体实现

    public static void BubbleSort(int[] arr){
            int hi = arr.length - 1;
            for (int i = 0; i <= hi; i++) {
                for (int j = 0; j < hi-i; j++) {
                    if(!SortUtil.less(arr,j,j+1)){
                        SortUtil.swap(arr,j,j+1);
                    }
                }
             }
    }
    

    改进一
    考虑到如果没有了交换 则说明所有元素位置已经是正确的,则可以直接退出循环,这种方式适合基本有序的数组

    public static void BubbleSort(int[] arr){
            int hi = arr.length - 1;
            for (int i = 0; i <= hi; i++) {
                boolean changed = false;
                for (int j = 0; j < hi-i; j++) {
                    if(!SortUtil.less(arr,j,j+1)){
                        SortUtil.swap(arr,j,j+1);
                        changed = true;
                    }
                }
                if(changed == false){
                    break;
                }
            }
        }
    

    4 算法分析

    使用了双层循环,复杂度为o(n^2),是稳定的排序,因为相同大小的元素没有必要交换

    相关文章

      网友评论

        本文标题:冒泡排序

        本文链接:https://www.haomeiwen.com/subject/ygmjbxtx.html