legongju.com
我们一直在努力
2025-01-08 02:20 | 星期三

怎样实现java数组的稳定排序

在 Java 中,稳定排序是指相等的元素在排序后保持原有的相对顺序。Java 提供了稳定的排序算法,如冒泡排序、插入排序和归并排序。以下是这些排序算法的实现:

  1. 冒泡排序(Bubble Sort):
public class BubbleSort {
    public static void main(String[] args) {
        int[] arr = {64, 34, 25, 12, 22, 11, 90};
        bubbleSort(arr);
        System.out.println("Sorted array is:");
        printArray(arr);
    }

    public static void bubbleSort(int[] arr) {
        int n = arr.length;
        for (int i = 0; i < n - 1; i++) {
            for (int j = 0; j < n - i - 1; j++) {
                if (arr[j] > arr[j + 1]) {
                    // swap arr[j+1] 和 arr[j]
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
    }

    public static void printArray(int[] arr) {
        for (int value : arr) {
            System.out.print(value + " ");
        }
    }
}
  1. 插入排序(Insertion Sort):
public class InsertionSort {
    public static void main(String[] args) {
        int[] arr = {64, 34, 25, 12, 22, 11, 90};
        insertionSort(arr);
        System.out.println("Sorted array is:");
        printArray(arr);
    }

    public static void insertionSort(int[] arr) {
        int n = arr.length;
        for (int i = 1; i < n; ++i) {
            int key = arr[i];
            int j = i - 1;

            // Move elements of arr[0..i-1], that are greater than key, to one position ahead of their current position
            while (j >= 0 && arr[j] > key) {
                arr[j + 1] = arr[j];
                j = j - 1;
            }
            arr[j + 1] = key;
        }
    }

    public static void printArray(int[] arr) {
        for (int value : arr) {
            System.out.print(value + " ");
        }
    }
}
  1. 归并排序(Merge Sort):
public class MergeSort {
    public static void main(String[] args) {
        int[] arr = {64, 34, 25, 12, 22, 11, 90};
        mergeSort(arr, 0, arr.length - 1);
        System.out.println("Sorted array is:");
        printArray(arr);
    }

    public static void mergeSort(int[] arr, int left, int right) {
        if (left < right) {
            int middle = (left + right) / 2;

            // Sort first and second halves
            mergeSort(arr, left, middle);
            mergeSort(arr, middle + 1, right);

            merge(arr, left, middle, right);
        }
    }

    public static void merge(int[] arr, int left, int middle, int right) {
        int n1 = middle - left + 1;
        int n2 = right - middle;

        // Create temp arrays
        int[] leftArray = new int[n1];
        int[] rightArray = new int[n2];

        // Copy data to temp arrays
        for (int i = 0; i < n1; ++i)
            leftArray[i] = arr[left + i];
        for (int j = 0; j < n2; ++j)
            rightArray[j] = arr[middle + 1 + j];

        // Merge the temp arrays
        int i = 0, j = 0;
        int k = left;
        while (i < n1 && j < n2) {
            if (leftArray[i] <= rightArray[j]) {
                arr[k] = leftArray[i];
                i++;
            } else {
                arr[k] = rightArray[j];
                j++;
            }
            k++;
        }

        // Copy the remaining elements of leftArray
        while (i < n1) {
            arr[k] = leftArray[i];
            i++;
            k++;
        }

        // Copy the remaining elements of rightArray
        while (j < n2) {
            arr[k] = rightArray[j];
            j++;
            k++;
        }
    }

    public static void printArray(int[] arr) {
        for (int value : arr) {
            System.out.print(value + " ");
        }
    }
}

这些排序算法都是稳定的,你可以根据需要选择合适的算法。

未经允许不得转载 » 本文链接:https://www.legongju.com/article/85021.html

相关推荐

  • 如何进行java反汇编

    如何进行java反汇编

    Java反汇编是将编译后的字节码文件(.class文件)转换回源代码的过程。要进行Java反汇编,你可以使用一些反编译工具,如JD-GUI、 JADX、Fernflower等。这里我们以...

  • java反汇编在安全领域的应用

    java反汇编在安全领域的应用

    Java反汇编技术在安全领域具有广泛的应用。它主要用于分析Java字节码,将其还原为源代码,以便更好地理解程序的结构和行为。以下是Java反汇编在安全领域的一些主...

  • java反汇编的效率如何提高

    java反汇编的效率如何提高

    Java反汇编的效率可以通过以下几种方法来提高: 选择合适的反汇编工具:使用高效的反汇编工具可以大大提高反汇编的速度。例如,JD-GUI、 JADX和Procyon等工具。 ...

  • java反汇编与正向工程的关系

    java反汇编与正向工程的关系

    Java反汇编和正向工程是两个不同的概念,但它们在软件开发过程中有一定的联系。 正向工程(Forward Engineering):正向工程是指从高级语言编写的源代码开始,通...

  • 什么情况下使用java rollback

    什么情况下使用java rollback

    在Java中,当事务处理过程中出现错误或异常时,为了保证数据的一致性和完整性,需要使用rollback来撤销已经执行的操作。以下是一些常见的使用rollback的情况: 数...

  • java多线程死锁的理解与应对策略

    java多线程死锁的理解与应对策略

    Java多线程死锁是指两个或多个线程在执行过程中,因争夺资源而造成的一种相互等待的现象,若无外力干涉那它们都将无法向前推进。死锁是并发编程中需要避免的问题...

  • 怎样通过编程技巧防止java多线程死锁

    怎样通过编程技巧防止java多线程死锁

    在Java中,多线程死锁是一个常见的问题,它发生在两个或更多的线程无限期地等待彼此释放资源的情况下。以下是一些通过编程技巧来防止Java多线程死锁的方法: 避免...

  • java多线程死锁案例分析

    java多线程死锁案例分析

    在Java中,多线程死锁是一种常见的问题,它发生在两个或多个线程相互等待对方释放资源的情况下。这会导致所有受影响的线程无限期地等待,从而阻止程序继续执行。...