【易客吧】_全网激活码总代_激活码商城

您现在的位置是:首页 > 热门资讯 > 正文

热门资讯

使用 JavaScript 对数组进行复杂排序:高级排序算法 (使用java语言编写的源程序保存时的文件扩展名是)

用户投稿2024-04-12热门资讯24

在 JavaScript 中对数组进行排序是一项常见的任务,但当需要执行复杂排序时,它可能会变得棘手。内置的 Array.sort() 方法提供了基本排序功能,但对于高级算法,您需要自定义代码。

高级排序算法

在本文中,我们将探讨几种高级排序算法,并使用 Java 语言编写源代码。这些算法包括:

  • 归并排序
  • 快速排序
  • 堆排序
  • 计数排序
  • 桶排序

归并排序

使用 JavaScript 对数组进行复杂排序:高级排序算法 (使用java语言编写的源程序保存时的文件扩展名是) 第1张

归并排序是一种分治排序算法,将其工作分成三步:

  1. 将数组分成两个较小的子数组,直到每个子数组只有一个元素。
  2. 递归调用归并排序来对每个子数组进行排序。
  3. 合并排序后的子数组。

// Java 代码:归并排序
public class MergeSort {public static void mergeSort(int[] arr, int low, int high) {if (low < high) {// 计算中间索引int mid = (low + high) / 2;// 分治左半部分mergeSort(arr, low, mid);// 分治右半部分mergeSort(arr, mid + 1, high);// 合并排序结果merge(arr, low, mid, high);}}private static void merge(int[] arr, int low, int mid, int high) {// 创建临时数组int[] temp = new int[high - low + 1];// 跟踪左右半部分和临时数组的索引int leftIndex = low;int rightIndex = mid + 1;int tempIndex = 0;// 比较并合并两半while (leftIndex <= mid && rightIndex <= high) {if (arr[leftIndex] <= arr[rightIndex]) {temp[tempIndex] = arr[leftIndex];leftIndex++;} else {temp[tempIndex] = arr[rightIndex];rightIndex++;}tempIndex++;}// 复制剩余元素while (leftIndex <= mid) {temp[tempIndex] = arr[leftIndex];leftIndex++;tempIndex++;}while (rightIndex <= high) {temp[tempIndex] = arr[rightIndex];rightIndex++;tempIndex++;}// Copy the merged temp array into the original arrayfor(int i = 0; i < tempIndex; i++) {arr[low + i] = temp[i];}}
}

快速排序

快速排序是另一种分治排序算法,其工作原理如下:

  1. 选择一个枢轴值(数组中的元素)。
  2. 将数组分成两个子数组:一个包含比枢轴值小的元素,另一个包含比枢轴值大的元素。
  3. 递归调用快速排序来对每个子数组进行排序。

// Java 代码:快速排序
public class QuickSort {public static void quickSort(int[] arr, int low, int high) {if (low < high) {// 寻找枢轴值并将其放在正确的位置int partitionIndex = partition(arr, low, high);// 分治左半部分quickSort(arr, low, partitionIndex - 1);// 分治右半部分quickSort(arr, partitionIndex + 1, high);}}private static int partition(int[] arr, int low, int high) {
// 选择最后一个元素作为枢轴值int pivot = arr[high];// 跟踪枢轴值左边的小元素索引int i = (low - 1);// 遍历数组for (int j = low; j < high; j++) {// 如果当前元素小于枢轴值,则将其交换到左边if (arr[j] < pivot) {i++;// 交换 arr[i] 和 arr[j]int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}}// 将枢轴值放在正确的位置int temp = arr[i + 1];arr[i + 1] = arr[high];arr[high] = temp;// 返回枢轴值的最终位置return (i + 1);}
}

堆排序

堆排序是一种基于二叉堆的数据结构的排序算法。其工作原理如下:

  1. 将数组转换为二叉堆,其中根节点始终是最大的元素。
  2. 重复从堆中弹出根节点并将其放在数组的末尾。
  3. 调整堆以保持最大堆属性。

// Java 代码:堆排序
public class HeapSort {public static void heapSort(int[] arr) {// 构建最大堆for (int i = arr.length / 2 - 1; i >= 0; i--) {heapify(arr, arr.length, i);}// 将根节点与末尾元素交换,并调整堆for (int i = arr.length - 1; i > 0; i--) {// 交换根节点与末尾元素int temp = arr[0];arr[0] = arr[i];arr[i] = temp;// 调整堆heapify(arr, i, 0);}}private static void heapify(int[] arr, intn, int i) {// 找到左孩子和右孩子节点int largest = i;int left = 2  i + 1;int right = 2  i + 2;// 如果左孩子大于根节点,则更新 largestif (left < n && arr[left] > arr[largest]) {largest = left;}// 如果右孩子大于根节点和左孩子,则更新 largestif (right < n && arr[right] > arr[largest]) {largest = right;}// 如果 largest 不是根节点,则交换根节点和 largest 节点,并调整堆if (largest != i) {int temp = arr[i];arr[i] = arr[largest];arr[largest] = temp;heapify(arr, n, largest);}}
}

计数排序

计数排序是一种基于键的范围的排序算法。它适用于值范围有限的数组。其工作原理如下:

  1. 确定数组中最大和最小的元素。
  2. 创建一个大小为 (最大值 - 最小值 + 1) 的计数数组。
  3. 遍历输入数组并增加计数数组中对应索引的值。
  4. 遍历计数数组并输出元素,其频率与计数数组中的值相对应。

// Java 代码:计数排序
public class CountingSort {public static void countingSort(int[] arr, int min, int max) {// 创建计数数组int[] count = new int[max - min + 1];// 统计每个元素的出现次数for (int i = 0; i < arr.length; i++) {count[arr[i] - min]++;}// 将计数数组转换为累加计数for (int i = 1; i < count.length; i++) {count[i] += count[i - 1];}// 输出排序后的数组int[] sortedArr = newint[arr.length];int j = arr.length -

若对本页面资源感兴趣,请点击下方或右方图片,注册登录后

搜索本页相关的【资源名】【软件名】【功能词】或有关的关键词,即可找到您想要的资源

如有其他疑问,请咨询右下角【在线客服】,谢谢支持!

使用 JavaScript 对数组进行复杂排序:高级排序算法 (使用java语言编写的源程序保存时的文件扩展名是) 第2张

发表评论

评论列表

  • 这篇文章还没有收到评论,赶紧来抢沙发吧~
欢迎你第一次访问网站!