«Сортировка вставки» для массива из текстового файла - PullRequest
0 голосов
/ 27 февраля 2020

Я пытаюсь выполнить 'сортировку вставкой' для массива, созданного из текстового файла.

Первая часть программы читает текстовый файл, присваивает свой контекст строке для имени и целое число для число. Поскольку текстовый файл имеет следующий формат:

100
12345
Jane
Doe
12359
John
Doe
98765
James
Doe

Таким образом, в первой строке текстового файла указывается общее число покупателей в файле. Следующие три строки - это Идентификатор, Имя и Фамилия клиента.

Я застрял в том, как я собираюсь установить 'InsertionSort', чтобы получать данные от переформатированных 'клиентов 'перечислите код, созданный в первых строках.

Я чувствую, что сортировка по вставке будет лучшим выбором для списка клиентов, который у меня есть. Следующее было лучшим примером, который я мог найти, который будет работать лучше всего с кодом. Я застрял, пытаясь заставить эту формулу вытянуть информацию из «списка клиентов» и запустить сортировку.

void insertionSort()
{
    int j, temp;
    for (int i = 1; i <= arr.Length - 1; i++)
    {
        temp = arr[i];
        j = i - 1;
        while (j >= 0 && arr[j] > temp)
        {
            arr[j + 1] = arr[j];
            j--;
        }
        arr[j + 1] = temp;
    }
}

Любая помощь с этим будет принята с благодарностью.

Тем временем Я рассмотрю метод двоичного поиска и посмотрю, что там.

Следующий код - «Программа».

using System;
using System.Collections.Generic;
using System.IO;

namespace ProgramTest
{
    public class Program
    {
        public static void Main(string [] args)
        {
            //Creates Customers list
            List<Customer> customers = new List<Customer>();
            string fName, lName;
            int id;
            //Opens text file
            using (StreamReader sr = File.OpenText("customers.txt"))
            {
                 //ignores first line
                 string data = sr.ReadLine();
                 //reads data and assigns objects
                 while ((data = sr.ReadLine()) != null)
                 {
                     fName = data;
                     lName = sr.ReadLine();
                     id = int.Parse(sr.ReadLine());
                     //creats customer class list 

                     customers.Add(new Customer() { customerId = id, fName = fName, lName = lName });
                 int choice;
            }
            do
            {
                Console.WriteLine("Main Menu\n");
                Console.WriteLine("1. List all Customers");
                Console.WriteLine("2. Sort by Customer ID");
                Console.WriteLine("3. Search by Customer ID");
                Console.WriteLine("4. Exit");
                Console.WriteLine();
                Console.Write("Enter Choice:");
                choice = Convert.ToInt32(Console.ReadLine());

                switch (choice)
                {
                    case 1:
                        listAll();
                        break;
                    case 2:
                        insertionSort();
                        break;
                    case 3:
                        binarySearch();
                        break;
                    case 0:
                        break;
                    default:
                        Console.WriteLine("Dont Recognize Input.");
                        break;
                } while (choice != 4);

                //display the list as is from text file
                void listAll()
                {
                    foreach (var customer in customers)
                        Console.WriteLine(customer);
                }

                //sorts list from based on Customer ID lowest to highest
                void insertionSort()
                {

                }

                //can search by customer ID
                void binarySearch()
                {

                }
            }
        }
    }
}

Следующий код является классом «Клиент».

using System;

namespace ProgramTest{
{
    public class Customer
    {
        /// First Name String
        public string fName { get; set; }

        /// Last Mame String
        public string lName { get; set; }

        /// Customer ID
        public int customerId { get; set; }

        /// Return String
        public override string ToString()
        {
            //return $"{fName}, {lName}, {customerId.ToString().PadLeft(5, '0')}";
            return $"{customerId}: {fName} {lName}";
        }
    }  
}

1 Ответ

0 голосов
/ 28 февраля 2020

Используя LINQ, этого легко достичь, используя в качестве примера код:

//sorts list from based on Customer ID lowest to highest
void insertionSort()
{
    customers = customers.OrderBy(x => x.customerId).ToList();
}

//can search by customer ID
void binarySearch()
{
    Console.Write("Customer ID to search:");
    var id = Convert.ToInt32(Console.ReadLine());
    var customer = customers.FirstOrDefault(x => x.customerId == id);
    if (customer != null)
    {
        Console.WriteLine(customer);
    }
    else
    {
        Console.WriteLine("Customer not found");
    }

}
...