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()函数进行排序的方法。根据数据情况选择合适的排序方法可以使程序运行更加高效。
