使用字符串作为值在 C# 中编写桶排序

Writing bucket sort in C# using strings as values

我需要帮助编写一个程序来接收三个不同字段的学生信息 (ID Number, first name, last name)。然后,根据 last name 字段按字母顺序对 table 进行排序。用户将输入学生数据,然后我希望它将 last name 数据分成两个桶,然后将它们放入冒泡排序中。我在将数据添加到单独的存储桶时遇到问题。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _123_Assignment2
{
    using System;
    using static System.Console;
    class Program
    {
        struct student
        {
            public int studentId;
            public string firstName;
            public string lastName;
        };

        static void Main(string[] args)
        {
            student[] studentInfo = new student[20];
            string[] bucketLow = new string[0];
            string[] bucketHigh = new string [0];
            int x = 0;
            int y = 0;

            WriteLine("Enter student ID number:");
            studentInfo[x].studentId = Convert.ToInt32(ReadLine());

            while (studentInfo[x].studentId != 999)                
            {
                WriteLine("Enter first name:");
                studentInfo[x].firstName = ReadLine();
                WriteLine("Enter last name:");
                studentInfo[x].lastName = ReadLine();
                x++;
                WriteLine("Enter student ID number:");
                studentInfo[x].studentId = Convert.ToInt32(ReadLine());
            }

            for (int j = 0; j < studentInfo.Length; j++)
            {    
                if (studentInfo[j].lastName.CompareTo(studentInfo[j + 1].lastName) > 0)
                    bucketLow[y] = studentInfo[j].lastName;
                else
                    bucketHigh[y] = studentInfo[j].lastName;
                y++;
            }                                                 
        }
    }
}

试试这个代码,你可以查看我的评论解释:

        student[] studentInfo = new student[20];

        //Make sure you initialize the correct number of variables on your string
        string[] bucketLow = new string[20];
        string[] bucketHigh = new string[20];
        int x = 0;
        int y = 0;

        //I commented out this line since you are already asking for inputs on without going on your counter scenario

        //Console.WriteLine("Enter student ID number:");
        //studentInfo[x].studentId = Convert.ToInt32(Console.ReadLine());

        //I made changes on this line, since, you are doing a condition based on the number of increment on your counter
        while (x <= 2)
        {
            //I put the enter student ID above since it will not be counted if it was put after the counter x
            Console.WriteLine("Enter student ID number:");
            studentInfo[x].studentId = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Enter first name:");
            studentInfo[x].firstName = Console.ReadLine();
            Console.WriteLine("Enter last name:");
            studentInfo[x].lastName = Console.ReadLine();
            x++;

        }

        for (int j = 0; j < x; j++)
        {
            //Make sure you put group all your conditions on round brackets to achieve your desired condition
            if ((studentInfo[j].lastName.CompareTo(studentInfo[j + 1].lastName)) > 0)
                bucketLow[y] = studentInfo[j].lastName;
            else
                bucketHigh[y] = studentInfo[j].lastName;
            y++;
        }