冒泡排序实现

一、通过JavaScript实现

1.1思路

通过循环遍历每一项元素,比较当前元素和其他所有未排序的元素,交换位置位置实现排序

1.2实现

/**
 * 获取一个随机数 数组
 * @param low 最小值
 * @param high 最大值
 * @param size 随机数个数
 * @returns {any[]} 随机数数组
 * @private
 */
function _getRandomArray(low, high, size) {
    // 判断参数是否可转换为数字,否则抛出异常
    if ((typeof parseInt(low) != "number") || (typeof parseInt(high) != "number") || (typeof parseInt(size) != "number")) {
        throw new Error("Exist argument is NaN!");
        return;
    }
    let array = new Array(size); // 声明一个size大小的数组
    for (let i = 0; i < size; i++) {  // 生成随机数并赋值给array数组
        array[i] = Math.ceil(Math.random() * high) - low;
    }
    return array;  // 返回该随机数数组
}

/**
 * 数组排序
 * @param _array
 * @param _asc 升序(默认)
 * @private
 */
function _bubble(_array, _asc = true) {
    // 判断参数是否合理,否则抛出异常
    if (_array.constructor.name != "Array") {
        throw new Error("The _array must be a Array")
        return;
    }
    // 循环遍历,根据遍历到的元素和尚未排序的元素进行比较
    for (let i = 0; i < _array.length; i++) {
        for (let j = i; j < _array.length; j++) {
            let condition = _asc?(_array[i] > _array[j]):(_array[i] < _array[j]);
            if (condition){
                let temp = _array[i];
                _array[i] = _array[j];
                _array[j] = temp;
            }
        }
    }
}
// 随机数组
let arr = _getRandomArray(10,100,10);
console.log(arr);  // [10, 44, 18, 64, 17, 37, 21, 6, 39, 52]
// 排序
_bubble(arr);  // 升序
console.log(arr);  // [6, 10, 17, 18, 21, 37, 39, 44, 52, 64]
_bubble(arr,false);  // 降序
console.log(arr);  // [64, 52, 44, 39, 37, 21, 18, 17, 10, 6]

二、通过Java实现

2.1思路

通过循环遍历每一项元素,比较当前元素和其他所有未排序的元素,交换位置位置实现排序

2.2实现

import java.util.Random;

public class Sort {

    /**
     * 获取[int]随机数数组
     * @param low  最小值
     * @param high 最大值
     * @param size 元素个数
     * @return [int]随机数数组
     */
    public static int[] getRandomArray(int low, int high, int size) {
        int[] digits = new int[size];
        for (int i = 0; i < size; i++) {
            Random random = new Random();
            int number = random.nextInt(high - low) + low;
            digits[i] = number;
        }
        return digits;
    }

    /**
     * int数组排序
     * @param numbers 源数组
     * @param asc     是否升序
     */
    public static void bubble(int[] numbers, boolean asc) {
        for (int i = 0; i < numbers.length; i++) {
            for (int j = 0; j < numbers.length; j++) {
                boolean condition = asc ? numbers[i] > numbers[j] : numbers[i] < numbers[j];
                if (condition) {
                    int temp = numbers[i];
                    numbers[i] = numbers[j];
                    numbers[j] = temp;
                }
            }
        }
    }

    public static void main(String[] args) {
        int[] digits = getRandomArray(0, 100, 10);  // 50,58,74,57,58,25,66,47,66,33,
        bubble(digits, true);  // 74,66,66,58,58,57,50,47,33,25,
    }
}

三、通过Python实现

1.1思路

通过循环比较每一个元素,交换位置位置实现排序

1.2实现

# -*- encode: utf-8 -*-
import numpy as np


def bubble(array, asc=True):
    """
    通过循环比较 交换位置
    :param array: 源列表
    :param asc: 是否升序
    """
    for i in range(array.size):
        for j in range(i, array.size):
            # 排序规则:如果asc为True(默认),则升序,当有比当前元素[i]小的元素[j]时交换顺序;否则,当有比当前[i]元素大的元素[j]时交换顺序
            condition = array[i] > array[j] if asc else array[i] < array[j]
            if condition:
                temp = array[i]
                array[i] = array[j]
                array[j] = temp


if __name__ == '__main__':
    # 生成0-100的随机数列表,大小为10
    randint = np.random.randint(100, size=10)  # [95 30 65 98 34 77 29 74 74 64]
    # 调用方法进行排序
    print(randint)  # 源随机列表: [68 47 45 15 15 88 72 89 59 80]

    bubble(randint)  # 升序
    print(randint)  # 升序结果: [15 15 45 47 59 68 72 80 88 89]

    bubble(randint, False)  # 降序
    print(randint)  # 降序结果: [89 88 80 72 68 59 47 45 15 15]

原文地址:https://www.cnblogs.com/langkyeSir/p/13282714.html