对对象数组进行快速排序

Quicksort an array of objects

编辑:我之前调用了我的排序方法 "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
    }

}

在那之后,我有一个洗牌方法可以正确洗牌,所以我也让它洗牌了相应的 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;
    }
}

您可能只浏览了快速排序方法,但为了以防万一,deckNum[] 是保存卡片整数值的数组,而 deck[] 数组保存我试图操作的卡片对象。

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

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

数组未排序的原因是 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;
    }
}

附带说明一下,您正在实施的不是快速排序算法。查看评论中引用的维基百科文章,了解快速排序的实际工作原理。