gpt4 book ai didi

java - 对对象数组进行快速排序

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:48:38 24 4
gpt4 key购买 nike

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

在这个构造函数中,我有一个卡片数组(对象数组)和一个应该对应于对象数组的 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;
}
}

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

关于java - 对对象数组进行快速排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47492352/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com