如何在不使用内置函数的情况下按字母顺序排序多个字符串

时间:2018-01-19 14:08:29

标签: c# string

我必须按字母顺序对一组字符串进行排序,而不使用任何内置函数,然后在屏幕上打印它们。我已经尝试将字符串的第一个字符串转换为数字值,然后将此值与字符串的其他第一个字符串进行比较,但我不认为这是一个不错的选择。

((类似的)

TextViews

所以我想知道在没有任何功能的情况下按字母顺序排序多个字符串的简单方法。这是一项学校作业。

2 个答案:

答案 0 :(得分:6)

由于这是一个家庭作业问题,我会给出一个启用答案,而不是实际的代码版本...

计算算法的方法

  1. 拿一张纸,把它撕成碎片,然后在每一块上写一个字。
  2. 将纸张依次放在一起(例如,它们代表一个未排序的数组)
  3. 按顺序完成列表中的项目。尝试采取程序方法;也就是说,每次做出决定时,你都要遵守规则,而不是神奇地" /智能地跳到下一步。
  4. 尝试记下您要遵守的规则。
  5. 再次混淆列表,并重复,完全遵循您所写的规则;它是否有效,或者你是否缺少任何规则/是否存在没有意义的规则。
  6. 此时您的规则列表基本上是伪代码;即你有一套指示可以遵循以获得你的结果;但它还没有用任何公认的编程语言编写。
  7. 将这些规则/伪代码翻译成实际代码。
  8. 试一试。如果它不起作用,试着找出它出错的地方。如果您无法查看错误,请点击此处,发布该代码并说出您的问题;然后我们可以帮助您回到正确的道路上。
  9. 注意:您当然可以查找现有的排序算法并实现这些算法;但我个人更喜欢上述内容,因为它教会您自己思考,而不是将现有算法转换为您的特定编码语言。

    其他提示

    进行比较时,请考虑您需要做什么。即你之前已经问过如何在比较它们之前将字符串中的字符转换为数字。是否需要这一步;你能不能简单地按字母顺序比较字符串? https://www.google.co.uk/search?q=c%23+compare+strings+alphabetically

    在代码示例中,您提供的值为string1string2,但您从未展示过他们的价值观'被分配...您是否需要为变量赋值,然后才能比较变量/何时以及何时进行这些分配?

    你还有一个整数j的循环被分配...你在哪里使用那个值/分配一个值是什么,除非你要使用它它?

    同样,您有一个变量biggestFirstChar,您可以为其指定一个值,但不要做任何事情。是否需要/你在哪里使用它?

    您之后的结果是一个排序的值列表,您可以输出该值。你拿着那个结果在哪里/哪个代码按顺序输出结果?

    您希望如何构建结果列表;即,您是否能够一次填充所有内容,或者您​​是否需要逐位修改它,直到所有项目都按顺序排列?

    此外,将问题分解为块并测试每个块和/或考虑其影响。即。

    • 你如何产出产量?
    • 如何比较2个字符串以确定列表中哪个应该是第一个?
    • 如何输出数组(列表)?
    • 如何将项目添加到结果列表中(或者如果您正在处理原始列表,如何在现有列表中交换值?)
    • 给定一个包含2个元素(项目)的数组(列表),编写代码将它们按顺序排列。无论初始订单如何Aardvark, BalloonBalloon, Aardvark),确保无效。
    • 现在将其扩展为3个项目的列表;但如果给出了2个项目的列表,请确保您的解决方案仍然有效。
    • 现在尝试解决原始问题
    • 最后(可选;奖励积分)查看您的代码,看看您是否可以使其更好(即重构它)。这意味着查看简单的演示文稿(您是否缩进了代码/使用有意义的变量和函数名称,是否对任何不自我解释的内容进行了评论等),并且还在寻找改进它的方法(你能看到吗?)一种低效的方法,其中一种不同的方法可以更好地工作/重复的任何代码可以转移到一个不同的功能,并从它所需的所有地方调用?

答案 1 :(得分:1)

您需要的是两种方法,即冒泡排序(或任何排序算法)和字符串比较算法。

你已经知道冒泡排序,所以我去进行字符串比较。

int Compare(string x, string y)
{
    if(x == y) return 0;
    if(x == null) return -1;
    if(y == null) return 1;

    int i = 0;
    int length = x.Length <= y.Length ? x.Length : y.Length;

    while(i < length)
    {
        if(x[i] > y[i]) return 1;
        if(x[i] < y[i]) return -1;
        i++;
    }

    if(x.Length == y.Length) return 0;
    if(x.Length > y.Length) return 1;
    else return -1;
}

只需在冒泡排序算法中使用此比较算法。

比较两个字符串

if(Compare(str1, str2) >= 0)
{
    // str1 is bigger or equal
}
else 
{
    // str2 is bigger.
}