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

Java中常用的排序函数

发布时间:2023-07-01 03:02:08

在Java中,常用的排序函数有许多种,包括冒泡排序、选择排序、插入排序、快速排序、归并排序等等。下面将针对这些常用的排序函数进行介绍。

1. 冒泡排序:冒泡排序是一种简单的排序算法,其原理是比较相邻的两个元素,如果顺序不对则交换位置,使得较大的元素逐渐“冒泡”到顶部。这个过程会持续进行多次,直到所有元素都排好序为止。

冒泡排序的代码实现可以如下所示:

   public static void bubbleSort(int[] arr) {
       int len = arr.length;
       for (int i = 0; i < len - 1; i++) {
           for (int j = 0; j < len - 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 len = arr.length;
       for (int i = 0; i < len - 1; i++) {
           int minIndex = i;
           for (int j = i + 1; j < len; j++) {
               if (arr[j] < arr[minIndex]) {
                   minIndex = j;
               }
           }
           int temp = arr[i];
           arr[i] = arr[minIndex];
           arr[minIndex] = temp;
       }
   }
   

3. 插入排序:插入排序是一种简单直观的排序算法,其原理是将未排序的元素逐个插入到已排序部分的合适位置。在插入的过程中,需要不断地将有序的元素向后移动,为新元素腾出位置。这个过程会持续进行多次,直到所有元素都排好序为止。

插入排序的代码实现可以如下所示:

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

4. 快速排序:快速排序是一种高效的排序算法,其原理是选择一个基准元素,通过一趟排序将待排元素分割成独立的两部分,其中一部分的所有元素均小于基准元素,另一部分的所有元素均大于基准元素。然后依次对两部分进行快速排序,直到所有元素都排好序为止。

快速排序的代码实现可以如下所示:

   public static void quickSort(int[] arr, int left, int right) {
       if (left < right) {
           int pivotIndex = partition(arr, left, right);
           quickSort(arr, left, pivotIndex - 1);
           quickSort(arr, pivotIndex + 1, right);
       }
   }
   
   private static int partition(int[] arr, int left, int right) {
       int pivot = arr[left];
       int i = left + 1;
       int j = right;
       while (true) {
           while (i <= j && arr[i] < pivot) {
               i++;
           }
           while (i <= j && arr[j] > pivot) {
               j--;
           }
           if (i >= j) {
               break;
           }
           int temp = arr[i];
           arr[i] = arr[j];
           arr[j] = temp;
           i++;
           j--;
       }
       arr[left] = arr[j];
       arr[j] = pivot;
       return j;
   }
   

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[] temp = new int[right - left + 1];
       int i = left;
       int j = mid + 1;
       int k = 0;
       while (i <= mid && j <= right) {
           if (arr[i] <= arr[j]) {
               temp[k] = arr[i];
               i++;
           } else {
               temp[k] = arr[j];
               j++;
           }
           k++;
       }
       while (i <= mid) {
           temp[k] = arr[i];
           i++;
           k++;
       }
       while (j <= right) {
           temp[k] = arr[j];
           j++;
           k++;
       }
       for (int m = 0; m < temp.length; m++) {
           arr[left + m] = temp[m];
       }
   }
   

以上介绍了Java中常用的几种排序函数及其代码实现。这些排序函数具有不同的特点和适用情况,根据具体的需求可以选择合适的排序函数来使用。