21xrx.com
2024-11-22 16:01:24 Friday
登录
文章检索 我的文章 写文章
我接触Java已经有好几年了
2023-06-11 05:53:23 深夜i     --     --

我接触Java已经有好几年了,作为一名开发者,常常需要对数据进行排序。今天我就来分享一下Java中常见的排序算法。

排序算法一般分为两种:比较排序和非比较排序。比较排序就是依据比较的结果将数据进行排序,而非比较排序则不是通过比较来实现的。

1. 冒泡排序

冒泡排序是比较排序中最简单的一种,其基本思想是相邻元素两两比较,将不符合排序规则的元素交换位置。冒泡排序的时间复杂度为O(n^2)。

下面是Java代码实现:


public void bubbleSort(int[] arr) {

  int n = arr.length;

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

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

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

        int temp = arr[j];

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

        arr[j + 1] = temp;

      }

    }

  }

}

2. 快速排序

快速排序也是比较排序中的一种,它的基本思想是选定一个基准值,将序列分成两个子序列,使得左边的子序列都小于基准值,右边的子序列都大于基准值。然后递归地对两个子序列进行排序。快速排序的时间复杂度为O(nlogn)。

下面是Java代码实现:


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

  if (left < right) {

    int i = left, j = right, pivot = arr[left];

    while (i < j) {

      while (i < j && arr[j] >= pivot) j--;

      if (i < j) arr[i++] = arr[j];

      while (i < j && arr[i] < pivot) i++;

      if (i < j) arr[j--] = arr[i];

    }

    arr[i] = pivot;

    quickSort(arr, left, i - 1);

    quickSort(arr, i + 1, right);

  }

}

3. 计数排序

计数排序是非比较排序中的一种,它的基本思想是统计待排序序列中每个元素出现的次数,然后根据元素的值将其放到相应位置上。计数排序的时间复杂度为O(n+k),其中,k为待排序序列的最大值。

下面是Java代码实现:


public void countingSort(int[] arr) {

  if (arr == null || arr.length <= 1) return;

  int max = arr[0], min = arr[0];

  for (int i = 1; i < arr.length; i++) {

    if (arr[i] > max) max = arr[i];

    else if (arr[i] < min) min = arr[i];

  }

  int[] count = new int[max - min + 1];

  for (int i = 0; i < arr.length; i++) {

    count[arr[i] - min]++;

  }

  int index = 0;

  for (int i = 0; i < count.length; i++) {

    while (count[i]-- > 0) {

      arr[index++] = i + min;

    }

  }

}

总结一下,Java中常用的排序算法有冒泡排序、快速排序、插入排序、希尔排序、归并排序、堆排序和计数排序等。这些算法的具体实现可以参考Java官方文档或其他相关资料。

  
  

评论区

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