Search code examples
c#sortingbucket-sort

Writing bucket sort in C# using strings as values


I need help writing a program that takes in student info for three separate fields (ID Number, first name, last name). Then, sorts the table alphabetically based on the last name field. The user will input the student data, then I would like it to separate the last name data into two buckets which will then be put into a bubble sort. I am having trouble with adding the data into separate buckets.

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

Solution

  • Try this code, you can check my comments for explanation:

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