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


    import java.util.Arrays;

    /**
    * 冒泡排序
    * <p>
    * 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
    * 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
    * 针对所有的元素重复以上的步骤,除了最后一个。
    * 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
    */
    public class BubbleSort {

    public static void main(String[] args) {
    // 测试次数
    int times = 50000;

    int maxNum = 100;
    int maxSize = 100;
    for (int i = 0; i < times; i++) {
    // 生成随机数组
    int[] arr1 = generateArray(maxNum, maxSize);
    // 复制
    int[] arr2 = copyArray(arr1);
    // 冒泡排序
    bubbleSort(arr1);
    // Api排序
    Arrays.sort(arr2);
    // 比较排序结果
    if (!arrayEquals(arr1, arr2)) {
    System.out.println("Sort failed!!!");
    System.out.println(Arrays.toString(arr1));
    System.out.println(Arrays.toString(arr2));
    return;
    }
    }
    System.out.println("Sort success");
    }

    /**
    * 冒泡排序
    *
    * @param arr 需要排序的数组
    */
    private static void bubbleSort(int[] arr) {
    if (arr == null || arr.length < 2) {
    return;
    }
    for (int i = 0; i < arr.length - 1; i++) {
    for (int j = 0; j < arr.length - i - 1; j++) {
    if (arr[j] > arr[j + 1]) {
    swap(arr, j, j + 1);
    }
    }
    }
    }

    /**
    * 生成随机数组
    *
    * @param maxNum 最大数
    * @param maxSize 数组最大大小
    * @return 随机数组
    */
    private static int[] generateArray(int maxNum, int maxSize) {
    int[] arr = new int[(int) (maxSize * Math.random())];
    for (int i = 0; i < arr.length; i++) {
    arr[i] = (int) (maxNum * Math.random()) - (int) (maxNum * Math.random());
    }
    return arr;
    }

    /**
    * 判断两数组是否完全相同
    *
    * @param arr1 数组1
    * @param arr2 数组2
    * @return 是否相同
    */
    private static boolean arrayEquals(int[] arr1, int[] arr2) {
    if (arr1 == arr2) {
    return true;
    }
    if (arr1 == null || arr2 == null || arr1.length != arr2.length) {
    return false;
    }
    for (int i = 0; i < arr1.length; i++) {
    if (arr1[i] != arr2[i]) {
    return false;
    }
    }
    return true;
    }

    /**
    * 复制数组
    *
    * @param arr 要复制的数组
    * @return 复制的数组
    */
    private static int[] copyArray(int[] arr) {
    if (arr == null) {
    return null;
    }
    int[] copy = new int[arr.length];
    for (int i = 0; i < arr.length; i++) {
    copy[i] = arr[i];
    }
    return copy;
    }

    /**
    * 交换数组两个元素的位置
    *
    * @param arr 数组
    * @param i 位置
    * @param j 位置
    */
    private static void swap(int[] arr, int i, int j) {
    // 同一个位置交换无意义,并且用异或交换会有问题
    if (i == j) {
    return;
    }
    // 交换
    arr[i] = arr[i] ^ arr[j];
    arr[j] = arr[i] ^ arr[j];
    arr[i] = arr[i] ^ arr[j];
    }

    }

  • 相关阅读:
    python中使用schedule模块定时执行任务
    python marshmallow库
    shell 脚本根据名称查找进程id会多出来两个id号
    docker随笔(1)
    python实现-kafka作为消息中间件 -实现数据生产和消费-实用的脚本
    python-kafka文档
    mysql文档
    VMware pro15安装centos7
    excel表计算和计算器计算结果不一致
    jmeter安装部署、maven路径配置
  • 原文地址:https://www.cnblogs.com/laydown/p/12732760.html
Copyright © 2011-2022 走看看