21xrx.com
2024-11-23 03:52:44 Saturday
登录
文章检索 我的文章 写文章
我最喜欢的Java排序算法
2023-06-10 09:07:38 深夜i     --     --

在编写Java代码时,经常需要对数据进行排序。而Java提供了多种排序算法来满足不同的需求。在这篇文章中,我将介绍三种我最喜欢的Java排序算法。

1. 冒泡排序

冒泡排序算法是最简单的算法之一。它的原理是不断比较相邻两个元素,如果满足条件,就将它们交换位置。该算法的时间复杂度为O(n^2),因此对于大型数据集,性能不够理想。以下是一个冒泡排序算法的例子:


public static void bubbleSort(int[] arr) {

  int n = arr.length;

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

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

      if(arr[j-1] > arr[j]) {

        int temp = arr[j-1];

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

        arr[j] = temp;

      }

    }

  }

}

2. 快速排序

快速排序算法是一种分治算法。它选择一个基准元素,并将待排序的元素分为两部分(比基准元素小的和比基准元素大的)。然后递归地对这两部分进行排序。该算法的时间复杂度为O(nlogn),因此对于大型数据集,性能比冒泡排序好得多。以下是一个快速排序算法的例子:


public static void quickSort(int[] arr, int low, int high) {

  if (low < high) {

    int pi = partition(arr, low, high);

    quickSort(arr, low, pi-1);

    quickSort(arr, pi+1, high);

  }

}

public static int partition(int[] arr, int low, int high) {

  int pivot = arr[high];

  int i = (low-1);

  for (int j=low; 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[high];

  arr[high] = temp;

  return i+1;

}

3. 归并排序

归并排序算法是一种分治算法。它将待排序的元素分为两部分,递归地对这两部分进行排序,然后将它们合并起来。该算法的时间复杂度为O(nlogn),因此对于大型数据集,性能比冒泡排序好,但比快速排序稍差一些。以下是一个归并排序算法的例子:


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

  }

}

public 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

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

  }

  for (int j=0; j

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

  }

  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排序算法。当处理大量数据时,快速排序或归并排序可能是更好的选择,但对于小型数据集,冒泡排序也是一个不错的选择。最终,你应该选择最适合你当前需求的算法。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复