Java实现快速排序和堆排序的示例代码

Java实现快速排序和堆排序是经常被面试官提问的面试题目之一。下面是一份攻略,来帮助大家快速掌握这两种排序算法。

快速排序

快速排序(Quick Sort)是一种基于分治思想实现的排序算法,其主要思路是通过分区(Partition)操作将一个数组分成两个子数组,再分别对子数组进行排序,从而达到整个数组有序的目的。

以下是Java实现快速排序的示例代码:

public void quickSort(int[] arr, int left, int right) {
  if (left >= right) {
    return;
  }
  int pivot = partition(arr, left, right);
  quickSort(arr, left, pivot - 1);
  quickSort(arr, pivot + 1, right);
}

public 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++;
      swap(arr, i, j);
    }
  }
  swap(arr, i + 1, right);
  return i + 1;
}

public void swap(int[] arr, int i, int j) {
  int temp = arr[i];
  arr[i] = arr[j];
  arr[j] = temp;
}

在这个示例代码中,我们使用了两个函数:quickSortpartition,其中,quickSort函数用于快速排序整个数组,partition函数用于实现分区操作,把整个数组分成两个子数组(其中一个小于基准值,一个大于基准值)。

示例:

int[] arr = {3, 5, 2, 7, 1, 8, 4};
quickSort(arr, 0, arr.length - 1);
for (int i : arr) {
  System.out.print(i + " ");
}

该示例输出结果为:1 2 3 4 5 7 8

堆排序

堆排序(Heap Sort)是一种基于堆的排序算法,其主要思路是先将待排序的序列建成一个大根堆或小根堆,然后将堆顶元素(即最大值或最小值)与堆的最后一个节点交换,然后再在剩下的节点中调整堆,使其重新成为堆。重复此过程,直到整个序列有序。

以下是Java实现堆排序的示例代码:

public void heapSort(int[] arr) {
  int len = arr.length;
  // 构建大根堆
  for (int i = len / 2 - 1; i >= 0; i--) {
    adjustHeap(arr, i, len);
  }
  // 排序
  for (int i = len - 1; i > 0; i--) {
    swap(arr, 0, i);
    adjustHeap(arr, 0, i);
  }
}

public void adjustHeap(int[] arr, int i, int len) {
  int temp = arr[i];
  for (int j = 2 * i + 1; j < len; j = 2 * j + 1) {
    if (j + 1 < len && arr[j] < arr[j + 1]) {
      j++;
    }
    if (arr[j] > temp) {
      arr[i] = arr[j];
      i = j;
    } else {
      break;
    }
  }
  arr[i] = temp;
}

public void swap(int[] arr, int i, int j) {
  int temp = arr[i];
  arr[i] = arr[j];
  arr[j] = temp;
}

在这个示例代码中,我们使用了三个函数:heapSortadjustHeapswap,其中,heapSort函数用于堆排序整个数组,adjustHeap函数用于调整堆,使其符合大根堆或小根堆的特点,swap函数用于交换两个节点的值。

示例:

int[] arr = {3, 5, 2, 7, 1, 8, 4};
heapSort(arr);
for (int i : arr) {
  System.out.print(i + " ");
}

该示例输出结果为:1 2 3 4 5 7 8

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java实现快速排序和堆排序的示例代码 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • Java中的数组排序方式(快速排序、冒泡排序、选择排序)

    下面是Java中的数组排序方式的完整攻略。 1. 快速排序 快速排序是常用的一种排序算法,其时间复杂度为O(nlogn)。其基本思想是选择一个基准数,将数组分成左右两部分,比基准数小的放在左边,比基准数大的放在右边,然后再对左右两部分分别递归地进行快速排序。 Java中快速排序的实现基于Arrays类的sort方法。下面是一个示例代码: public sta…

    算法与数据结构 2023年5月19日
    00
  • 基于C++实现的各种内部排序算法汇总

    基于C++实现的各种内部排序算法汇总 概述 本攻略汇总了常见的基于C++实现的内部排序算法,包括选择排序、冒泡排序、插入排序、希尔排序、归并排序、快速排序、堆排序。以下是算法的具体实现过程。 选择排序 选择排序的核心思想是每次找到未排序序列中的最小值,然后放到已排序序列的末尾。具体实现过程如下: void selection_sort(vector<i…

    算法与数据结构 2023年5月19日
    00
  • C语言 实现归并排序算法

    C语言实现归并排序算法的攻略如下: 展示归并排序算法思路 先将待排序的序列拆分成若干小规模子序列,直到每个子序列可以直接排序为止。 然后对每个子序列进行排序,合并成新的有序序列。 重复第二步,直到只剩下一个排序完毕的序列。 C语言代码实现 下面是一份C语言实现归并排序算法的代码,代码内部有详细的注释,可以帮助理解代码: #include <stdio.…

    算法与数据结构 2023年5月19日
    00
  • JS前端面试必备——基本排序算法原理与实现方法详解【插入/选择/归并/冒泡/快速排序】

    JS前端面试必备——基本排序算法原理与实现方法详解 在前端面试中,算法是一个必考的考点,掌握一些基本的排序算法对于一个前端工程师来说是非常重要的。 排序算法的分类 排序算法可以按照许多不同的标准进行分类: 平均时间复杂度 空间复杂度 稳定性 内部排序和外部排序 在这篇文章中,我们将按照时间复杂度从小到大的顺序介绍以下五个基本的排序算法:插入排序、选择排序、归…

    算法与数据结构 2023年5月19日
    00
  • 用c语言实现冒泡排序,选择排序,快速排序

    首先我们来讲一下三种基本的排序算法——冒泡排序、选择排序和快速排序,并且给出实现的具体代码。 冒泡排序 冒泡排序是一个非常简单的排序算法,其基本思想是比较相邻两个数的大小,如果前一个数比后一个数大,就将两个数交换位置。通过不断重复这个过程,将最大的数“冒泡”到数组的最后面,这个过程类似于水泡在水中不断冒上来,因此得其名。 具体的实现代码如下: void bu…

    算法与数据结构 2023年5月19日
    00
  • c语言5个常用的排序算法实例代码

    C语言5个常用的排序算法实例代码 本文旨在讲解C语言中常用的5种排序算法,包括冒泡排序、选择排序、插入排序、快速排序和归并排序。以下将逐一介绍它们的实现过程,并提供示例代码。 冒泡排序(Bubble Sort) 算法思想:冒泡排序是一种简单的排序算法,它会首先比较相邻的元素,如果它们的顺序不正确,就交换它们的位置。这样一遍比较下来,最后一个元素就已经是最大的…

    算法与数据结构 2023年5月19日
    00
  • java简单冒泡排序实例解析

    Java简单冒泡排序是一种常见的排序算法,它通过不断比较相邻元素的大小,并交换相邻元素的位置,从而将最大(最小)的元素逐渐交换到序列的顶端(底端),实现排序操作。在本篇文章中,我们将详细讲解如何使用Java实现简单的冒泡排序算法。 算法实现思路 定义一个整型数组,包含待排序的元素 使用for循环嵌套,通过不断比较相邻的元素大小,将最大(最小)元素逐渐移到数组…

    算法与数据结构 2023年5月19日
    00
  • C语言详细讲解qsort函数的使用

    C语言详细讲解qsort函数的使用 qsort函数简介 在C语言中,qsort函数是一个标准库函数,用于将一个数组排序。它使用快速排序算法,实现了高效的排序。qsort函数的原型定义如下: void qsort (void* base, size_t num, size_t size, int (*compar)(const void*,const void…

    算法与数据结构 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部