21xrx.com
2024-12-23 03:12:42 Monday
登录
文章检索 我的文章 写文章
作为一名Java开发者
2023-06-12 20:12:30 深夜i     --     --

作为一名Java开发者,我在日常工作中离不开排序算法。在许多场景下,比如数据查找、去重、统计等等,排序算法都扮演着重要的角色。今天我想介绍几种Java经典排序算法,并用简单的代码例子加以说明。

第一个关键词是“冒泡排序”,这是一种比较简单直观的排序方法。其基本思想是从左到右不断交换相邻逆序的元素,直到没有逆序的元素为止。下面是Java代码实现:


public static void bubbleSort(int[] arr) {

  // 外层循环表示已经排好几个数

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

    // 内层循环表示比较相邻的两个数并交换

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

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

        int temp = arr[j];

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

        arr[j + 1] = temp;

      }

    }

  }

}

第二个关键词是“快速排序”,这是一种高效的、分治的排序方法。其基本思想是选取一个基准数,将所有比基准数小的数放到其左侧,比基准数大的数放到其右侧,然后递归地对左右两个子序列进行排序。下面是Java代码实现:


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

  if (left >= right) return; // 递归结束条件

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

  while (i < j) {

    // 从后向前搜索比基准数小的数

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

    if (i < j) arr[i++] = arr[j]; // 将找到的数放到左侧

    // 从前向后搜索比基准数大的数

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

    if (i < j) arr[j--] = arr[i]; // 将找到的数放到右侧

  }

  arr[i] = base;

  quickSort(arr, left, i - 1); // 对左子序列进行快排

  quickSort(arr, i + 1, right); // 对右子序列进行快排

}

第三个关键词是“堆排序”,这是一种利用二叉堆进行排序的方法。其基本思想是先建立一个二叉堆,再将堆顶元素(即最大元素)与未排序部分的最后一个元素交换,然后重新调整堆,直到全部排序完毕。下面是Java代码实现:


public static void heapSort(int[] arr) {

  // 构建初始堆

  for (int i = arr.length / 2 - 1; i >= 0; i--) {

    adjustHeap(arr, i, arr.length);

  }

  // 排序

  for (int i = arr.length - 1; i > 0; i--) {

    swap(arr, 0, i);

    adjustHeap(arr, 0, i);

  }

}

private static void adjustHeap(int[] arr, int i, int len) {

  int temp = arr[i], k = 2 * i + 1;

  while (k < len) {

    if (k + 1 < len && arr[k] < arr[k + 1]) {

      k++;

    }

    if (arr[k] > temp) {

      arr[i] = arr[k];

      i = k;

      k = 2 * i + 1;

    } else {

      break;

    }

  }

  arr[i] = temp;

}

private static void swap(int[] arr, int i, int j) {

  int temp = arr[i];

  arr[i] = arr[j];

  arr[j] = temp;

}

综上所述,Java经典排序算法包括冒泡排序、快速排序和堆排序。虽然它们的实现方式各不相同,但都是为了实现同一个目的:将无序的数据按照某种规则排列起来,方便后续的处理和使用。

  
  

评论区

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