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

yizhihongxing

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日

相关文章

  • Go语言实现常用排序算法的示例代码

    本文将详细介绍如何使用Go语言实现常用排序算法的示例代码。主要内容包括: 排序算法介绍 排序算法示例代码 算法测试 排序算法介绍 排序算法是计算机科学基本的算法,其目的是将一组数据按照特定的规则进行排序。常用的排序算法包括冒泡排序、选择排序、插入排序、归并排序和快速排序等。以下是每种算法的简单介绍: 冒泡排序:重复比较相邻的两个元素,将较大的元素向后移动,最…

    算法与数据结构 2023年5月19日
    00
  • JS实现根据数组对象的某一属性排序操作示例

    下面是JS实现根据数组对象的某一属性排序操作的完整攻略。 1. 问题背景 在前端开发中,我们经常会遇到需要对数组对象按照某一属性进行排序的问题。比如,我们有一个包含多个学生信息的数组对象,每个学生对象都有学号、姓名、成绩等属性,我们希望按照成绩从高到低对学生进行排序,以便于进行查找和展示。 2. 定义排序函数 针对上述问题,我们需要定义一个排序函数,实现按照…

    算法与数据结构 2023年5月19日
    00
  • C++实现选择性排序(SelectionSort)

    C++实现选择性排序(SelectionSort) 选择性排序(Selection Sort)是计算机科学中一种简单直观的排序算法。它的工作原理是:首先在未排序的数列中找到最小(大)的元素,然后将其存放到数列的起始位置,接着再从剩余的未排序元素中继续寻找最小(大)的元素,然后放到已排序序列的末尾。以此类推,直到所有元素均被排序完毕。 具体的实现步骤如下: 在…

    算法与数据结构 2023年5月19日
    00
  • Python实现选择排序

    当我们需要对一个列表或数组进行排序时,选择排序是一种简单易懂的方法。Python是一种非常流行的编程语言,它可以轻松实现选择排序。 以下是Python实现选择排序的攻略: 选择排序的原理 选择排序是一种简单直观的排序算法,其基本思想是每次选择出最小的元素,放到已经排好序的部分的末尾。 实现步骤 找到未排序部分的最小元素; 将其放在已排序部分的末尾; 重复步骤…

    算法与数据结构 2023年5月19日
    00
  • 深入解析Radix Sort基数排序算法思想及C语言实现示例

    深入解析Radix Sort基数排序算法思想及C语言实现示例 什么是基数排序算法 基数排序即Radix Sort,是一种非比较型排序算法。相比于其他排序算法,如快速排序、归并排序等,基数排序的时间复杂度较为稳定,且不受数据规模的影响,适用于数据范围较小但位数较多的序列排序。 基数排序算法思想 基数排序算法的核心思想是按照不同位数上的数字对数据进行排序,从低位…

    算法与数据结构 2023年5月19日
    00
  • javascript笛卡尔积算法实现方法

    JavaScript笛卡尔积算法实现方法 什么是笛卡尔积 笛卡尔积是指给定多个集合,每个集合中分别选取一个元素组成的所有可能组合的集合。例如,有两个集合 X={1,2} 和 Y={3,4},那么它们的笛卡尔积为 {(1,3), (1,4), (2,3), (2,4)}。 实现笛卡尔积算法 JavaScript实现笛卡尔积算法的过程可以分为以下三步: 遍历所有…

    算法与数据结构 2023年5月19日
    00
  • C++中sort函数的基础入门使用教程

    以下是详细讲解“C++中sort函数的基础入门使用教程”的完整攻略及两条示例说明。 C++中sort函数的基础入门使用教程 简介 sort函数是C++ STL中的一个快速排序函数,我们可以用它对数组或容器进行排序。 基本使用 sort函数的一般形式如下: #include <algorithm> sort(first, last, cmp); 其…

    算法与数据结构 2023年5月19日
    00
  • C#中使用快速排序按文件创建时间将文件排序的源码

    下面就来详细讲解如何在C#中使用快速排序按文件创建时间将文件排序的源码攻略。 1. 快速排序原理 快速排序(Quick Sort)是一种基于分治法的高效排序算法,其主要思想是选择一个基准点(pivot),将数组分为左右两个子数组,将左边的数组的元素都小于基准点,右边的数组的元素都大于基准点,再递归对左右子数组进行快排操作,直到子数组长度为1或0。快速排序的时…

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