冒泡排序

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),是稳定的排序,因为相同大小的元素没有必要交换

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容