zoukankan      html  css  js  c++  java
  • 冒泡排序--Bubble sort

    原理

    临近的数字两两进行比较,按照从小到大(或者从大到小)的顺序进行交换,

    这样一趟过去后,最大(或最小)的数字被交换到了最后一位,

    然后再从头开始进行两两比较交换,直到倒数第二位时结束,其余类似看例子。

    算法的关键是,循环几趟,每趟比较几次

    例子

    从小到大排序

    原始待排序数组| 7 | 3 | 2 | 1 | 4 | 9 |

    第一趟排序(外循环)

    第一次两两比较7 > 3交换(内循环)

    交换前状态| 7 | 3 | 2 | 1 | 4 | 9 |

    交换后状态| 3 | 7 | 2 | 1 | 4 | 9 |

    第二次两两比较,7 > 2交换

    交换前状态| 3 | 7 | 2 | 1 | 4 | 9 |

    交换后状态| 3 | 2 | 7 | 1 | 4 | 9 |

    第三次两两比较,7 > 1交换

    交换前状态| 3 | 2 | 7 | 1 | 4 | 9 |

    交换后状态| 3 | 2 | 1 | 7 | 4 | 9 |

    第四次两两比较,7 > 4交换

    交换前状态| 3 | 2 | 1 | 7 | 4 | 9 |

    交换后状态| 3 | 2 | 1 | 4 | 7 | 9 |

    第五次两两比较,7 < 9不交换

    交换前状态| 3 | 2 | 1 | 4 | 7 | 9 |

    交换后状态| 3 | 2 | 1 | 4 | 7 | 9 |

    第二趟排序(外循环)

    第一次两两比较3 > 2交换

    交换前状态| 3 | 2 | 1 | 4 | 7 | 9 |

    交换后状态| 2 | 3 | 1 | 4 | 7 | 9 |

    第二次两两比较,3 > 1交换

    交换前状态| 2 | 3 | 1 | 4 | 7 | 9 |
    交换后状态| 2 | 1 | 3 | 4 | 7 | 9 |

    第三次两两比较,3 < 4不交换

    交换前状态| 2 | 1 | 3 | 4 | 7 | 9 |
    交换后状态| 2 | 1 | 3 | 4 | 7 | 9 |

    第四次两两比较,4 < 7不交换

    交换前状态| 2 | 1 | 3 | 4 | 7 | 9 |

    交换后状态| 2 | 1 | 3 | 4 | 7 | 9 |

    第三趟排序(外循环)

    第一次两两比较2 > 1交换

    交换后状态| 2 | 1 | 3 | 4 | 7 | 9 |

    交换后状态| 1 | 2 | 3 | 4 | 7 | 9 |

    第二次两两比较,2 < 3不交换

    交换后状态| 1 | 2 | 3 | 4 | 7 | 9 |
    交换后状态| 1 | 2 | 3 | 4 | 7 | 9 |

    第三次两两比较,3 < 4不交换

    交换后状态| 1 | 2 | 3 | 4 | 7 | 9 |
    交换后状态| 1 | 2 | 3 | 4 | 7 | 9 |

    第四趟排序(外循环)无交换

    第五趟排序(外循环)无交换

    排序完毕,输出最终结果| 1 | 2 | 3 | 4 | 7 | 9 |

    参考代码

    /**
     * @Description:冒泡排序算法实现
     */
    public class BubbleSort {
    
        public static void bubbleSort(int[] arr) {
            if (arr == null || arr.length == 0)
                return;
            //冒泡排序是通过相邻的比较和交换
            //算法的关键是,循环几趟,每趟比较几次
            for (int i = 0; i < arr.length - 1; i++) {
                System.out.println("i======"+i);
                for (int j = arr.length - 1; j > i; j--) {
                    System.out.println("j======"+j);
                    if (arr[j] < arr[j - 1]) {
                        swap(arr, j - 1, j);
                    }
                }
            }
            System.out.println("结果为==========================");
            for (int i : arr) {
                System.out.println(i);
            }
        }
    
        public static void swap(int[] arr, int i, int j) {
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
        public static void main(String[] args) {
            int[] arr = {4,5,2,1,5,4};
            new BubbleSort().bubbleSort(arr);
        }
    }
  • 相关阅读:
    mysql添加字段索引失败 BLOB/TEXT column 'col2' used in key specification without a key length
    ajax跨域处理 No 'Access-Control-Allow-Origin' header is present on the requested resource 问题
    pycharm/Goland/Webstorm永久激活记录
    nginx.service: Failed to read PID from file /run/nginx.pid: Invalid argument解决
    mysql优化之explain各参数详解:
    Django项目中"expected str, bytes or os.PathLike object, not list"错误解决:
    Mysql之1451
    python2与python3下的base64模块
    celery:Unrecoverable error: AttributeError("'unicode' object has no attribute 'iteritems')
    django-redis缓存记录
  • 原文地址:https://www.cnblogs.com/llq1214/p/9714427.html
Copyright © 2011-2022 走看看