使用插入排序算法按字母顺序排序c#

时间:2012-02-17 18:44:33

标签: c# sorting insertion-sort

我一直在搜索互联网和书籍,但没有运气,所以希望有人能指出我正确的方向。

我基本上需要使用插入排序而不是内置方法按字母顺序对对象进行排序。我已经尝试使用数组和列表,但似乎无法让它工作。你会怎么做呢?

我有一类播放器,最新的尝试填充了列表对象:

    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 code

          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
            }

          }  

希望是对的:/

我想我理解PublicJoe是如何做到的,但你如何得到并设置一个对象的索引?谢谢你的期待。

2 个答案:

答案 0 :(得分:0)

阵列不适合插入。如果你回想一下你的课程,你可能会发现一个更适合插入的数据结构。

在插入排序中,您获取未排序列表中的项目,然后将其放在另一个列表的正确位置。

您似乎想要做的事情似乎是某种选择排序。

我认为您交换价值的4行存在问题

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

如果我是你,我会再看看。

答案 1 :(得分:0)

如果您使用的是列表,则只需执行以下操作:

public void InsertionSort(Player newUser)
{
    var index = users.FindLastIndex(u => u.Name <= newUser.Name);
    users.Insert(index, newUser);
}