c# - C# 中的合并排序实现 - StackOverflow 异常
问题描述
每个人!我正在尝试在 C# 中实现合并排序算法。我的代码有一个 StackOverflow 异常。我试图找出问题出在哪里,但我无法解决。
using System;
class MainClass {
static void merge(int[] arr, int leftIndex, int endLeftIndex, int endRightIndex){
// leftArr [leftIndex ... endLeftIndex]
// rightArr [endLeftIndex + 1 ... endRightIndex]
int leftArrLength = endLeftIndex - leftIndex + 1;
int rightArrLength = endRightIndex - endLeftIndex;
int[] leftArr = new int[leftArrLength], rightArr = new int[rightArrLength];
// Copying the data from the parent Array to the leftArr & rightArr
for(int i = 0; i < leftArrLength; i++)
leftArr[i] = arr[leftIndex + i];
for(int j = 0; j < rightArrLength; j++)
rightArr[j] = arr[endLeftIndex + j + 1];
// the start index of the array that will be merged
int mergedArrIndex = leftIndex;
// set two start pointers for both left and right arrays
int leftIndexMerge = 0, rightIndexMerge = 0;
// the merging operation
while(leftIndexMerge < leftArrLength && rightIndexMerge < rightArrLength){
if(leftArr[leftIndexMerge] < rightArr[rightIndexMerge])
arr[mergedArrIndex++] = leftArr[leftIndexMerge++];
else
arr[mergedArrIndex++] = rightArr[rightIndexMerge++];
}
// copying the rest elements
while(leftIndexMerge < leftArrLength)
arr[mergedArrIndex++] = leftArr[leftIndexMerge++];
while(rightIndexMerge < rightArrLength)
arr[mergedArrIndex++] = rightArr[rightIndexMerge++];
}
static void mergeSort(int[] arr, int leftIndex, int endRightIndex){
if(leftIndex < endRightIndex){
// leftArr [leftIndex ... m]
// rightArr [m + 1 ... endRightIndex]
int m = leftIndex + (endRightIndex - 1) / 2;
mergeSort(arr, leftIndex, m);
mergeSort(arr, m + 1, endRightIndex);
merge(arr, leftIndex, m, endRightIndex);
}
}
public static void Main (string[] args) {
int[] arr = {1,2,5,10,1,2,3,4,4};
mergeSort(arr, 0, arr.Length);
foreach(int i in arr) Console.WriteLine(i);
}
}
查看 repl.it 中的代码:https ://repl.it/@MohamedMarzouk/MergeSortImplementationInCSharp
解决方案
推荐阅读
- git - 如何在没有 --force 的情况下将代码上传到 bitbucket
- javascript - Cloud-Firestore 功能在达到有限数量后停止对集合/文档的更改?
- r - 在列表中的向量末尾添加字符串时遇到问题
- node.js - 如何根据函数的结果在 Mongo 中排序?
- c++ - 在类中声明后如何修改 char 数组?
- c++ - 在 C++ 函数中使用函数成员
- vue.js - 删除列表中的项目时,我希望该项目在淡出时保持原位
- flutter - 如何使用提供程序检测数组元素的变化?
- reactjs - 当状态改变时,对文本字段做出反应 onChange 更新整个组件
- javascript - 如何只编写纯 JS(没有 jquery 或任何东西)代码来从外部“.js”文件中读取 JSON 数据?