2012-02-17 135 views
0

我一直在搜索互联网和书籍,但没有运气,所以希望有人能指出我在正确的方向。按字母顺序排序使用插入排序算法c#

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

我有一类球员,充满了名单的最新尝试对象:

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类:

//须藤代码

  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的做法,但是如何获取和设置对象的索引?感谢您的期待。

+1

功课?什么不起作用?发布您的代码。 – 2012-02-17 18:49:44

+0

http://www.publicjoe.f9.co.uk/csharp/sort00.html – Josh 2012-02-17 18:57:46

+1

如果您编辑您的问题以包括迄今为止的最佳尝试,并解释为什么您认为它不起作用,您会得到一些帮助它。 – 2012-02-17 19:07:32

回答

0

数组不好插入。如果您回想起您的课程,您可能会发现一个更适合插入的数据结构。

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

你似乎试图做的似乎是某种选择排序。

我想有一个与在那里你交换你的价值观

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

的4条线路有问题我必须在那如果我是你第二次看。

+0

也许使用?: 温度对象 第二个对象索引= temp 第二个对象索引=第一个对象索引 temp - 1 =第二个对象索引 – Flak714 2012-02-18 02:41:18

0

如果您使用的列表,你可以简单地这样做:

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