当前位置: 首页 > 知识库问答 >
问题:

C#合并排序字符串数组

邹慈
2023-03-14

我正在玩排序数组,我弄清楚了如何对int数组进行合并排序。但是我不知道合并字符串数组。在正常排序时,对字符串数组进行排序很容易,但合并排序不同。我到目前为止所做的代码如下,正在处理int数组。

public int number = 1;
public void mergeSort(int[] sortArray, int lower, int upper)
    {
        int middle;
        if (upper == lower)
            return;
        else
        {
            middle = (lower + upper) / 2;
            mergeSort(sortArray, lower, middle);
            mergeSort(sortArray, middle + 1, upper);
            Merge(sortArray, lower, middle + 1, upper);
        }
    }
public void Merge(int[] sortArray, int lower, int middle, int upper)
    {
        string[] temp = new string[sortArray.Length];
        int lowEnd = middle - 1;
        int low = lower;
        int n = upper - lower + 1;
        while ((lower <= lowEnd) && (middle <= upper))
        {
            if (sortArray[lower] <= sortArray[middle])
            {
                temp[low] = sortArray[lower].ToString();
                low++;
                lower++;
            }
            else
            {
                temp[low] = sortArray[middle].ToString();
                low++;
                middle++;
            }
        }
        while (lower <= lowEnd)
        {
            temp[low] = sortArray[lower].ToString();
            low++;
            lower++;
        }
        while (middle <= upper)
        {
            temp[low] = sortArray[middle].ToString();
            low++;
            middle++;
        }
        for (int i = 0; i < n; i++)
        {
            sortArray[upper] = Int32.Parse(temp[upper]);
            upper--;
        }
    }
private void btnExecute_Click(object sender, EventArgs e)
    {
        String arraylength;
        int num;
        arraylength = Microsoft.VisualBasic.Interaction.InputBox("Enter a number to determine the length of the array", "Enter Number");
        try
        {
            while (!(int.TryParse(arraylength, out num)))
            {
                MessageBox.Show("Not a valid number, try again.");
                arraylength = Microsoft.VisualBasic.Interaction.InputBox("Enter a number a to determine the length of the array", "Enter Number");
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show("Value entered is not in a valid format");
        }
        int intlength = Int32.Parse(arraylength);

        string[] stringsArray = new string[intlength];


        int arraypos = 0;
        // For display purposes
        int positionvalue = 1;
        txtOutput.Text += "Unsorted array: \r\n";
        foreach (string s in stringsArray)
        {
            string arrayvalue = Microsoft.VisualBasic.Interaction.InputBox("Enter a number for array value" + positionvalue, "Enter Number");
            string arrayvalues = arrayvalue;
            stringsArray[arraypos] = arrayvalues.ToString();

            txtOutput.Text += arrayvalues + "\t";
            arraypos++;
            positionvalue++;
        }
        mergeSort(stringsArray, 0, stringsArray.Length - 1);

        txtOutput.Text += "\r\nSorted array: \r\n";
        foreach (string i in stringsArray)
        {
            txtOutput.Text += i + "\t";
        }

    }

共有1个答案

通宾白
2023-03-14

我认为在对string使用排序时,您面临的主要问题是下面一行

if (sortArray[lower] <= sortArray[middle])

因为你不能使用

因为你可以在你的代码中使用它,你可以改变你的代码

while ((lower <= lowEnd) && (middle <= upper)) //notice the CompareTo
{
    if (sortArray[lower].CompareTo(sortArray[middle]) < 1) //<= here
    {
        temp[low] = sortArray[lower];
        low++;
        lower++;
    }
    else
    {
        temp[low] = sortArray[middle];
        low++;
        middle++;
    }
}

你可能需要调整你的最后一个循环和其他一些小事情。

for (int i = 0; i < n; i++)
{
    sortArray[upper] = temp[upper]; //sortArray is string[]
    upper--;
}

 类似资料:
  • 我一直在尝试在我正在开发的程序中实现各种类型的排序。到目前为止,我已经成功地对整数进行了排序。为了使这个(合并)代码排序为字符串数组而不是整数数组,需要做哪些更改?时间复杂度会变化吗?如果是这样,是好是坏? 编辑1:尝试使用比较器。有些事情似乎不对劲。返回错误,例如无法从字符串转换为int,反之亦然。固定的 编辑2:我在if(数组[low].compareTo(数组[high])行得到NullPo

  • 我在名为的类中有一个链表,它包含以下属性: 我有另一个类,它是“实际列表”,它只包含对列表头部的引用,这个类被称为“文本列表”,它接收一个字符串,并假设将该字符串的每个单词排序在列表中。例如,对于句子: 链接列表如下所示: 箭头就像指向列表中下一个节点的指针。 我想先把所有的单词放在一个链表中(类),然后做一个MERGE SORT来对链表中的单词进行排序。 我想做的是采用拆分方法将列表拆分为两个列

  • 对于这个项目,我得到了一个字符串数组和一个整数数组。int[1]是字符串[1]的排名。我需要使用mergesort按1到n的顺序对int数组进行排序,我在下面已经完成了这项工作。但是当int数组被移动时,我还需要切换字符串数组的位置,以便它们都被排序,如果这有意义的话?我不知道我的编码有什么问题,甚至我的想法是否真的有效,但我一直在stringSorted[k]=stringRight[j]上得到

  • 我有一个练习,我必须在链表中插入一个字符串。假设字符串如下所示: 在合并排序之后,链表应该是这样的: 问题是在我的合并排序代码中,我收到以下内容: 所有的单词都被排序,但第一个单词(原始列表的头部)不是。 我有两个类:TextList和WordNode。 WordNode类有两个属性: TextList类只有一个属性:链接列表头的地址: 我有一个构造函数,在其中我将字符串随机插入到一个链表中。最后

  • 问题内容: 我想转换JSON字符串 至 注意:我没有使用排序的版本进行通信(因为键顺序并不重要),我需要一个排序的版本来执行本地测试(通过比较JSON字符串)。 编辑: I4V指出了使用Json.Net的解决方案,我宁愿使用不需要包含任何第三方库的解决方案(实际上,我在应用程序中使用内置的System.Json) 我张贴由I4V +一些测试提供的解决方案要点这里。谢谢你们。 问题答案: 我将为此使

  • 我的任务是用C#为二维数组创建合并排序算法。数组看起来像这样 我需要从文件中取数组并按x的升序对行进行排序,同时程序要检查是否有相同x值同时不同Y值的坐标对,当数组排序后,程序要将其写入文件中。我已经为一维数组创建了算法,但是不懂如何为二维数组重写算法,这是我的代码,请帮助我