Quicksort一组对象

时间:2017-11-26 02:05:18

标签: java arrays sorting quicksort

编辑:之前我把我的排序方法称为“quicksort”,但现在感谢你们,我意识到这是完全错误的。这可能是某种类型的选择排序。

在这个构造函数中,我有一个卡片组(对象数组)和一个应该对应于对象数组的int数组:

public Deck ()
{
    deck = new Card [52];
    deckNum = new int [52];

    for (int x = 0 ; x < 52 ; x++)  // for each card in standard deck
    {
        deck [x] = new Card (x); // create card
        deckNum [x] = x; // card number
    }

}

之后,我有一个shuffle方法,它正确地进行了随机播放,因此我也将它改组为相应的int数组:

 public void shuffle ()
{
    int value;
    int tempNum;
    Card temp;
    Random r = new Random();
    for (int x = 0; x < deck.length; x++) // goes through all cards
    {
      value = r.nextInt(x + 1); // random value

      //Shuffle Card array
      temp = deck[value]; // new array
      deck[value] = deck[x];
      deck[x] = temp;

   // Shuffle int array (not displayed)
      tempNum = deckNum[value];
      deckNum[value] = deckNum[x];
      deckNum[x] = tempNum;


    }
}

现在对于排序方法,当我尝试使用时,最终会再次洗牌

  public void quickSort ()
{
    Card temp1;

    for (int x = 0 ; x < deck.length - 1 ; x++) //sort first length-1 values
    {
       int lowPos = x; // assume first value is lowest

  for (int y = x + 1 ; y < deck.length ; y++) {// check rest of list
    if (deckNum [y] < deckNum [lowPos]) // uses the int array to find a lower value
    {
    lowPos = y;// make it the lowest
    }
 }


      // swap low value with value in its proper position
      //uses card array again
      temp1 = deck [x]; 
      deck [x] = deck [lowPos];
      deck [lowPos] = temp1;
    }
}

你可能只查看quicksort方法,但是以防万一,deckNum []是保存卡的整数值的数组,而deck []数组包含我试图操作的卡对象。

当我只使用一个int数组时,排序方法有效。

使用int数组可能完全错误,但老实说我不知道​​其他任何方式。一点帮助就会很棒!

1 个答案:

答案 0 :(得分:1)

数组未排序的原因是 deckNum 数组未随循环前进而排序。

试试这个:

public void quickSort () {
    Card temp1;
    int temp2;

    for (int x = 0 ; x < deck.length - 1 ; x++) //sort first length-1 values
    {
        int lowPos = x; // assume first value is lowest
        for (int y = x + 1 ; y < deck.length ; y++) // check rest of list
            if (deckNum [y] < deckNum [lowPos])
                lowPos = y; // make it the lowest

        temp1 = deck [x]; 
        deck [x] = deck [lowPos];
        deck [lowPos] = temp1;

        //Add the following to your code
        temp2 = deckNum [x]; 
        deckNum [x] = deckNum [lowPos];
        deckNum [lowPos] = temp2;
    }
}

作为旁注,您正在实施的不是快速排序算法。看一下评论中提到的维基百科文章,了解快速排序的实际工作方式。