优化冒泡排序

275 阅读2分钟

一、冒泡排序

1.1 概念

重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。

这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。

1.2 图解

1320444-20190827150917865-1560511120.gif

二、代码实现

2.1 java实现

import java.util.Arrays;
/**
 * 优化版冒泡排序
 */
public class Test07 {
    public static void main(String[] args) {
        //定义一个名为value的无序数组0-9
        int[] values ={3,1,6,2,9,0,7,4,8,5};
        //打印排序前的数组
        System.out.println("排序前,数组:"+ Arrays.toString(values));
        bubbleSort(values);
        //打印排序后的数组
        System.out.println("排序后,数组:"+Arrays.toString(values));
    }
    public static void bubbleSort(int[] values){
        //定义一个用于交换的中间变量
        int temp;
        //定义一个布尔类型变量,标记数组是否已达到有序状态
        boolean flag =true;
        //定义循环遍历数组values.length次每一次会取得一个最大数
        for (int i=0;i<values.length-1;i++){
            //内部循环取values.length-i-1次,-i是为了不访问已经排好的最大值-1是为了防止数组溢出
            for (int j=0;j<values.length-i-1;j++){
                //依次判断相邻两个数的值,将大的数后移
                if (values[j]>values[j+1]){
                    temp=values[j];
                    values[j]=values[j+1];
                    values[j+1]=temp;
                    //flag变为false表示发生了交换
                    flag=false;
                }
            }
            //判断是否发生了交换,优化冒泡排序
            if (flag){
                break;
            }else{
                flag=true;
            }
        }
    }
}

2.2 python实现

def bubbleSort(values):
    #定义循环遍历列表values.length-1次每一次会取得一个最大数
    for i in range(len(values)-1):
        # 定义一个布尔类型变量,标记列表是否已达到有序状态
        flag = False
        # 内部循环取values.length-i-1次,-i是为了不访问已经排好的最大值-1是为了防止数组溢出
        for j in range(len(values)-i-1):
            # 依次判断相邻两个数的值,将大的数后移
            if values[j]>values[j+1]:
                values[j], values[j+1]=values[j+1], values[j]
                # flag变为True表示发生了交换
                flag = True
        # 判断是否发生了交换,优化冒泡排序
        if not flag:
            break

if __name__ == '__main__':
    # 定义一个名为value的无序数组0-9
    values = [3,1,6,2,9,0,7,4,8,5]
    # 打印排序前的列表
    print(f'排序前,列表:{values}')
    bubbleSort(values)
    # 打印排序后的列表
    print(f'排序后,列表:{values}')

三、总结

如切如磋,如琢如磨

冒泡排序的优化方式还有众多,以上列举为最简单的优化。

才疏学浅,拙文一篇欢迎雅正。