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

Java中数组的排序函数及其使用方法

发布时间:2023-06-09 00:27:41

Java中有许多数组排序方法可以使用,这里将介绍常用的四种排序方法:冒泡排序、选择排序、插入排序和快速排序,包括对数组的升序和降序排序。

1. 冒泡排序

冒泡排序是最简单的排序算法之一,它的工作原理是通过比较相邻的元素,不断交换相邻元素的位置,将最大的元素放到数组的最后面。这个过程会持续若干次,直到所有元素都排好序为止。

升序排序:

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

降序排序:

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

2. 选择排序

选择排序的工作原理是在数组中寻找最小元素,将其放置到数组的起始位置,再在剩余元素中寻找最小元素,将其放置到已排序的元素末尾。这个过程也会持续若干次,直到所有元素都排好序为止。

升序排序:

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;
    }
}

降序排序:

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

3. 插入排序

插入排序的工作原理是将数组分成已排序区间和未排序区间,每次取未排序区间中的第一个元素,将它插入到已排序区间中的合适位置。这个过程同样会持续若干次,直到所有元素都排好序为止。

升序排序:

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

降序排序:

public static void insertionSortDesc(int[] arr){
    int n = arr.length;
    for (int i = 1; i < n; i++){
        int temp = arr[i];
        int j = i-1;
        while (j >= 0 && arr[j] < temp){
            arr[j+1] = arr[j];
            j--;
        }
        arr[j+1] = temp;
    }
}

4. 快速排序

快速排序是一种基于分治思想的排序算法,它通过递归分别对数组的左半边和右半边进行排序,最终使得整个数组有序。

升序排序:

public static void quickSort(int[] arr, int left, int right){
    if (left < right){
        int index = partition(arr, left, right);
        quickSort(arr, left, index-1);
        quickSort(arr, index+1, right);
    }
}

private static int partition(int[] arr, int left, int right){
    int pivot = arr[right];
    int i = left-1;
    for (int j = left; j < right; j++){
        if (arr[j] < pivot){
            i++;
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
    }
    int temp = arr[i+1];
    arr[i+1] = arr[right];
    arr[right] = temp;
    return i+1;
}

降序排序:

public static void quickSortDesc(int[] arr, int left, int right){
    if (left < right){
        int index = partitionDesc(arr, left, right);
        quickSortDesc(arr, left, index-1);
        quickSortDesc(arr, index+1, right);
    }
}

private static int partitionDesc(int[] arr, int left, int right){
    int pivot = arr[right];
    int i = left-1;
    for (int j = left; j < right; j++){
        if (arr[j] > pivot){
            i++;
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
    }
    int temp = arr[i+1];
    arr[i+1] = arr[right];
    arr[right] = temp;
    return i+1;
}

这些排序方法都是比较常见的,在Java中也有现成的排序函数可以调用,例如Arrays.sort()函数可以对数组进行排序。使用方法如下:

int[] arr = {3, 1, 4, 1, 5};
Arrays.sort(arr);  // 升序排序
System.out.println(Arrays.toString(arr));  // 输出 [1, 1, 3, 4, 5]

如果需要进行降序排序,可以使用Arrays.sort()函数的另一个重载方法,并传入自定义的Comparator对象,例如:

int[] arr = {3, 1, 4, 1, 5};
Arrays.sort(arr, (a, b) -> b - a);  // 降序排序
System.out.println(Arrays.toString(arr));  // 输出 [5, 4, 3, 1, 1]

总结:

以上介绍了Java中数组排序的四种基本方法,分别是冒泡排序、选择排序、插入排序和快速排序,以及使用Arrays.sort()函数进行排序的方法。根据数据情况选择合适的排序方法可以使程序运行更加高效。