本文将介绍如何使用 Java 语言编程随机生成 10000 个实数,并将这些实数存储在数组中。随后,我们将使用四种常见的排序算法对这些数据进行排序,并提供伪代码和实际代码实现。

1. 随机生成数据

首先,我们需要使用 Java 代码随机生成 10000 个实数。可以使用 java.util.Random 类来实现。

import java.util.Random;

public class SortExample {

    public static void main(String[] args) {
        // 生成 10000 个随机实数
        double[] array = new double[10000];
        Random random = new Random(); 
        for (int i = 0; i < array.length; i++) {
            array[i] = random.nextDouble(); // 生成 0 到 1 之间的随机数
        }
        // ... 以下代码用于排序 ...
    }
}

2. 排序算法

我们将使用以下四种排序算法对数据进行排序:

  • 冒泡排序 (Bubble Sort)
  • 选择排序 (Selection Sort)
  • 插入排序 (Insertion Sort)
  • 自底向上的合并排序 (Bottom-Up Merge Sort)

2.1 冒泡排序 (Bubble Sort)

冒泡排序是一种简单的排序算法,每次比较相邻的两个元素,如果顺序不对则交换。

伪代码:

冒泡排序(array):
    n = array.length
    for i from 0 to n-1:
        for j from 0 to n-i-1:
            if array[j] > array[j+1]:
                swap(array[j], array[j+1])

实际代码:

public static void bubbleSort(double[] array) {
    int n = array.length;
    for (int i = 0; i < n-1; i++) {
        for (int j = 0; j < n-i-1; j++) {
            if (array[j] > array[j+1]) {
                // 交换两个元素
                double temp = array[j];
                array[j] = array[j+1];
                array[j+1] = temp;
            }
        }
    }
}

2.2 选择排序 (Selection Sort)

选择排序是一种简单的排序算法,每次从未排序的部分选择最小的元素,放到已排序部分的末尾。

伪代码:

选择排序(array):
    n = array.length
    for i from 0 to n-1:
        minIndex = i
        for j from i+1 to n-1:
            if array[j] < array[minIndex]:
                minIndex = j
        swap(array[i], array[minIndex])

实际代码:

public static void selectionSort(double[] array) {
    int n = array.length;
    for (int i = 0; i < n-1; i++) {
        int minIndex = i;
        for (int j = i+1; j < n; j++) {
            if (array[j] < array[minIndex]) {
                minIndex = j;
            }
        }
        // 交换两个元素
        double temp = array[i];
        array[i] = array[minIndex];
        array[minIndex] = temp;
    }
}

2.3 插入排序 (Insertion Sort)

插入排序是一种简单的排序算法,将未排序的元素逐个插入到已排序的部分中。

伪代码:

插入排序(array):
    n = array.length
    for i from 1 to n-1:
        key = array[i]
        j = i-1
        while j >= 0 and array[j] > key:
            array[j+1] = array[j]
            j--
        array[j+1] = key

实际代码:

public static void insertionSort(double[] array) {
    int n = array.length;
    for (int i = 1; i < n; i++) {
        double key = array[i];
        int j = i-1;
        while (j >= 0 && array[j] > key) {
            array[j+1] = array[j];
            j--;
        }
        array[j+1] = key;
    }
}

2.4 自底向上的合并排序 (Bottom-Up Merge Sort)

自底向上的合并排序是一种归并排序的变体,将数组分为小块进行排序,然后逐步合并。

伪代码:

自底向上的合并排序(array):
    n = array.length
    for blockSize from 1 to n-1:
        for start from 0 to n-blockSize-1 step blockSize*2:
            mid = start + blockSize-1
            end = min(start + blockSize*2-1, n-1)
            merge(array, start, mid, end)

合并(array, start, mid, end):
    n1 = mid - start + 1
    n2 = end - mid
    left = new double[n1]
    right = new double[n2]
    for i from 0 to n1-1:
        left[i] = array[start + i]
    for j from 0 to n2-1:
        right[j] = array[mid + 1 + j]
    i = 0, j = 0, k = start
    while i < n1 and j < n2:
        if left[i] <= right[j]:
            array[k] = left[i]
            i++
        else:
            array[k] = right[j]
            j++
        k++
    while i < n1:
        array[k] = left[i]
        i++
        k++
    while j < n2:
        array[k] = right[j]
        j++
        k++

实际代码:

public static void mergeSort(double[] array) {
    int n = array.length;
    for (int blockSize = 1; blockSize < n; blockSize *= 2) {
        for (int start = 0; start < n-blockSize; start += blockSize*2) {
            int mid = start + blockSize-1;
            int end = Math.min(start + blockSize*2-1, n-1);
            merge(array, start, mid, end);
        }
    }
}

private static void merge(double[] array, int start, int mid, int end) {
    int n1 = mid - start + 1;
    int n2 = end - mid;
    double[] left = new double[n1];
    double[] right = new double[n2];
    for (int i = 0; i < n1; i++) {
        left[i] = array[start + i];
    }
    for (int j = 0; j < n2; j++) {
        right[j] = array[mid + 1 + j];
    }
    int i = 0, j = 0, k = start;
    while (i < n1 && j < n2) {
        if (left[i] <= right[j]) {
            array[k] = left[i];
            i++;
        } else {
            array[k] = right[j];
            j++;
        }
        k++;
    }
    while (i < n1) {
        array[k] = left[i];
        i++;
        k++;
    }
    while (j < n2) {
        array[k] = right[j];
        j++;
        k++;
    }
}

3. 使用示例

以下是使用以上代码对随机生成的数组进行排序的示例:

import java.util.Random;

public class SortExample {

    public static void main(String[] args) {
        // 生成 10000 个随机实数
        double[] array = new double[10000];
        Random random = new Random(); 
        for (int i = 0; i < array.length; i++) {
            array[i] = random.nextDouble(); // 生成 0 到 1 之间的随机数
        }

        // 使用不同的排序算法进行排序
        double[] bubbleSortedArray = array.clone();
        bubbleSort(bubbleSortedArray);
        System.out.println("冒泡排序后:" + Arrays.toString(bubbleSortedArray));

        double[] selectionSortedArray = array.clone();
        selectionSort(selectionSortedArray);
        System.out.println("选择排序后:" + Arrays.toString(selectionSortedArray));

        double[] insertionSortedArray = array.clone();
        insertionSort(insertionSortedArray);
        System.out.println("插入排序后:" + Arrays.toString(insertionSortedArray));

        double[] mergeSortedArray = array.clone();
        mergeSort(mergeSortedArray);
        System.out.println("合并排序后:" + Arrays.toString(mergeSortedArray));
    }

    // ... 排序算法的代码 ...
}

以上代码会先随机生成 10000 个实数,然后使用四种排序算法分别对其进行排序,并将排序后的结果输出到控制台。

4. 总结

本文介绍了使用 Java 语言生成随机数据并使用四种常见的排序算法进行排序。通过本文,您应该能够理解这些排序算法的原理,以及如何使用 Java 代码实现它们。希望本文能够帮助您更好地理解和应用排序算法。

Java 随机生成数据并使用冒泡排序、选择排序、插入排序和合并排序进行排序

原文地址: https://www.cveoy.top/t/topic/pcEJ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录