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实现对map的字典序排序操作示例

    下面是Java实现对Map的字典序排序操作的完整攻略: 1. 根据键(Key)排序 1.1 实现方式一 Map<String, String> map = new HashMap<>(); map.put("b", "2"); map.put("c", "3&quo…

    算法与数据结构 2023年5月19日
    00
  • Js Snowflake(雪花算法)生成随机ID的实现方法

    Js Snowflake(雪花算法)生成随机ID的实现方法 介绍 雪花算法是Twitter开源的一种简单高效、生成唯一ID的算法,可以用于解决数据分布式系统中的ID生成器。本文将介绍使用Js实现雪花算法生成随机ID的完整方法。 实现 引入 首先,我们需要引入雪花算法的js库文件snowflake.js,并在页面中引入 <script src=&quot…

    算法与数据结构 2023年5月19日
    00
  • C#实现冒泡排序和插入排序算法

    C#实现冒泡排序和插入排序算法 冒泡排序算法 冒泡排序算法是一种基本的排序算法,其基本思想是通过对相邻的元素进行比较和交换,逐渐把待排序的元素交换到相应的位置上。 在C#中,实现冒泡排序非常简单,代码示例如下: public static void BubbleSort(int[] arr) { int len = arr.Length; for (int …

    算法与数据结构 2023年5月19日
    00
  • TypeScript十大排序算法插入排序实现示例详解

    针对“TypeScript十大排序算法插入排序实现示例详解”的完整攻略,我有如下的描述和示例: 1. 算法简介 插入排序(Insertion Sort)是一种简单直观的排序算法。它的基本思想是将目标数组分为已排序和未排序区间,每次从未排序区间中选取一个元素并插入到已排序区间中正确的位置。 插入排序是一种相对基础的排序算法,不仅实现起来比较简单,而且时间复杂度…

    算法与数据结构 2023年5月19日
    00
  • TypeScript调整数组元素顺序算法

    下面是详细的攻略: TypeScript调整数组元素顺序算法 在 TypeScript 中实现调整数组元素顺序的算法需要使用到以下两种方法: 方法一:splice() array.splice(startIndex, toRemove, …itemsToAdd) splice() 方法可以实现对数组中指定起始索引 startIndex 开始的若干元素的删…

    算法与数据结构 2023年5月19日
    00
  • PHP字符串逆序排列实现方法小结【strrev函数,二分法,循环法,递归法】

    下面我将为您详细讲解“PHP字符串逆序排列实现方法小结【strrev函数,二分法,循环法,递归法】”的完整攻略。 什么是字符串逆序排列? 字符串逆序排列指的是将一个字符串中的字符按照相反的顺序重新排列,比如将字符串 “hello world” 更改为 “dlrow olleh”。 使用strrev函数实现字符串逆序排列 PHP内置函数 strrev() 可以…

    算法与数据结构 2023年5月19日
    00
  • php实现快速排序的三种方法分享

    那么现在我将为您介绍“php实现快速排序的三种方法分享”的完整攻略。 什么是快速排序 快速排序(Quick Sort)通常被认为是对冒泡排序的一种改进。在冒泡排序中,需要进行多次的数据比较和交换操作,而快速排序与其不同之处在于它通过一个基准值将待排序的数组分成两个部分。在计算机领域,快速排序是一种常见的排序算法。 快速排序的常规实现思路 快速排序的常规实现思…

    算法与数据结构 2023年5月19日
    00
  • C++使用一个栈实现另一个栈的排序算法示例

    C++使用一个栈实现另一个栈的排序算法 本文将介绍如何使用一个栈(以下称为stack1)将另一个未排序的栈(以下称为stack2)进行排序,排序结果存放在stack2中。 实现思路 我们可以通过stack1不断从stack2中弹出元素,将弹出的元素插入到正确的位置,实现栈的排序。 具体步骤如下: 创建一个临时变量temp,用于存储stack1中弹出的元素。 …

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