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

时间:2017-02-22 01:52:38

标签: c# sorting bucket-sort

我需要帮助编写一个程序,该程序接收三个单独字段(ID Number, first name, last name)的学生信息。然后,根据last name字段按字母顺序对表格进行排序。用户将输入学生数据,然后我希望将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++;
            }                                                 
        }
    }
}

1 个答案:

答案 0 :(得分:0)

试试此代码,您可以查看我的评论以获得解释:

        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++;
        }