Сортировка по алфавиту с использованием алгоритма сортировки вставками c # - PullRequest
0 голосов
/ 17 февраля 2012

Я искал в интернете и книгах, но не повезло, поэтому надеялся, что кто-то может указать мне правильное направление.

Мне в основном нужно отсортировать объекты по их заявлению в алфавитном порядке, используя сортировку вставкойа не встроенные методы.Я пытался использовать массив и список, но не могу заставить его работать.Как бы вы это сделали?

У меня есть класс Player, последняя попытка заполнена списком объектов:

    public static List<Player> user = new List<Player>(); 
    private string name; //Read and Write
    private int score; //Read and Write
    private double health; //Read and Write
    private int level;  //Read and Write
    public string[] inventory = new string[30];

    public void setName(String newName)
    {
        name = newName;
    }
    public string getName()
    {
        return name;
    }
    public void setScore(int newScore)
    {
        score = newScore;
    }
    public int getScore()
    {
        return score;
    }
    public void setHealth(double newHealth)
    {
        health = newHealth;
    }
    public double getHealth()
    {
        return health;
    }
    public void setLevel(int newLevel)
    {
        level = newLevel;
    }
    public int getLevel()
    {
        return level;
    }

    public static void Saved_Player()
    {
        user.Add(new Player() { name = "Timid Bob", health = 63, level = 6, score = 2000, });
        user[0].inventory[0] = "Steel Sword";
        user[0].inventory[1] = "1mm MAW";
        user[0].inventory[2] = "Short Bow";
        user[0].inventory[0] = "Grenade";

        user.Add(new Player() {name = "Killer Bob", health = 82, level = 2, score = 1050000, });
        user[1].inventory[0] = "Glass Sword";
        user[1].inventory[1] = "250mm MAW";
        user[1].inventory[2] = "Elephant Bow";
        user[1].inventory[3] = "Rock";

и т. Д. ... до 6 пользовательских объектов

Для сортировки я пытаюсь использовать следующий код в другом классе Form1:

// код sudo

          for(int i = 0; i < Player.user.Count; i++)
          {

            while (i index is higher than i+1 index)
            {
                swap i index with i+1 index
            }

          }  

Надеюсь, что это правильно: /

Iкажется, я понимаю, как PublicJoe's сделал это, но как вы получаете и устанавливаете индекс объекта?Спасибо за поиск.

Ответы [ 2 ]

0 голосов
/ 18 февраля 2012

Если вы используете список, вы можете просто сделать это:

public void InsertionSort(Player newUser)
{
    var index = users.FindLastIndex(u => u.Name <= newUser.Name);
    users.Insert(index, newUser);
}
0 голосов
/ 18 февраля 2012

Массивы плохо для вставки в.если вы вспомните свои классы, вы можете найти структуру данных, которая лучше подходит для вставки.

В сортировке вставки вы берете элемент из вашего несортированного списка, а затем помещаете его в правильное местодругой список.

То, что вы, похоже, пытаетесь сделать, похоже, является своего рода сортировкой выбора.

Я думаю, что есть проблема с 4 строками, где вы меняете значения

                object temp;
                object = Player.user[Second];
                Player.user[first] = Player.user[Second];
                Player.user[(temp - 1)] = Player.user[Second];

Я бы посмотрел на тебя второй раз.

...