欢迎访问宙启技术站
智能推送

基于Java函数实现数组排序的方法?

发布时间:2023-06-03 16:02:38

Java是一种非常流行的编程语言,它支持各种数据结构和算法。在Java中,我们可以使用各种方法对数组进行排序,这些方法包括冒泡排序,快速排序,插入排序,选择排序,归并排序等等。本文将介绍这些方法的实现原理和代码示例。

1. 冒泡排序

冒泡排序是一种基本排序算法,它的思想是将相邻的元素两两比较,如果顺序不对就交换,直到没有需要交换的元素。

    public static void bubbleSort(int[] arr) {

        int n = arr.length;

        for(int i = 0; i < n; i++){

            for(int j = i + 1; j < n; j++){

                if(arr[i] > arr[j]){

                    int temp = arr[i];

                    arr[i] = arr[j];

                    arr[j] = temp;

                }

            }

        }

    }

2. 快速排序

快速排序是一种分治算法,它利用递归的方式将数组分成两个子数组,然后分别对它们进行排序。

    public static void quickSort(int[] arr, int left, int right) {

        int i = left;

        int j = right;

        int pivot = arr[(left + right) / 2];

        while(i <= j){

            while(arr[i] < pivot){

                i++;

            }

            while(arr[j] > pivot){

                j--;

            }

            if(i <= j){

                int temp = arr[i];

                arr[i] = arr[j];

                arr[j] = temp;

                i++;

                j--;

            }

        }

        if(left < j){

             quickSort(arr, left, j);

        }

        if(i < right){

            quickSort(arr, i, right);

        }

    }

3. 插入排序

插入排序的基本思想是将待排序的元素插入到已经排好序的元素中。在对排序数组进行遍历时,将当前元素插入到已经排好序的数组中。

    public static void insertionSort(int[] arr){

       int n = arr.length;

       for(int i = 1; i < n; i++){

           int j = i;

           while(j > 0 && arr[j-1] > arr[j]){

               int temp = arr[j];

               arr[j] = arr[j-1];

               arr[j-1] = temp;

               j--;

           }

       }

    }

4. 选择排序

选择排序的基本思想是,从待排序的数据中选择最小(或最大)的一个元素,放到序列的起始位置作为已排序序列。接着从剩余的未排序元素中继续寻找最小(或最大)的元素,放到已排序序列的末尾。

    public static void selectionSort(int[] arr){

        int n = arr.length;

        for(int i = 0; i < n-1; i++){

            int minIndex = i;

            for(int j = i+1; j < n; j++){

                if(arr[j] < arr[minIndex]){

                    minIndex = j;

                }

            }

            int temp = arr[minIndex];

            arr[minIndex] = arr[i];

            arr[i] = temp;

        }

    }

5. 归并排序

归并排序是一种分治算法,它将待排序数组分成两半,并将它们分别排序。然后将这两个已排序的数组合并起来,形成一个完全排序的数组。

    public static void mergeSort(int[] arr, int left, int right){

        if(left < right){

            int mid = (left + right) / 2;

            mergeSort(arr, left, mid);

            mergeSort(arr, mid+1, right);

            merge(arr, left, mid, right);

        }

    }

    private static void merge(int[] arr, int left, int mid, int right){

        int n1 = mid - left + 1;

        int n2 = right - mid;

        int[] L = new int[n1];

        int[] R = new int[n2];

        for(int i = 0; i < n1; i++){

            L[i] = arr[left + i];

        }

        for(int j = 0; j < n2; j++){

            R[j] = arr[mid + j + 1];

        }

     

        int i = 0, j = 0;

        int k = left;

        while(i < n1 && j < n2){

            if(L[i] <= R[j]){

                arr[k] = L[i];

                i++;

            }

            else{

                arr[k] = R[j];

                j++;

            }

            k++;

        }

        while(i < n1){

            arr[k] = L[i];

            i++;

            k++;

        }

        while(j < n2){

            arr[k] = R[j];

            j++;

            k++;

        }

    }

以上是一些常见的Java数组排序算法的具体实现方法。每种算法都有自己的优缺点,选择合适的算法取决于实际情况和需求。但是,无论我们使用什么算法,我们都应该理解它们的思想和实现原理,以便更好地理解和编写优秀的算法。