选择排序

时间:2014-08-30 13:48:14

标签: java selection

问题是当数据排序时它会加倍:

数据:20,5,9,8,7

输出是:

  20, 5, 9, 8, 7
  5, 20, 9, 8 ,7
  5, 20, 9, 8 ,7
  5, 20, 9, 8 ,7
  5, 20, 9, 8 ,7
  5, 9, 20, 8 ,7
  5, 8, 20, 9 ,7
  5, 7, 20, 8 ,7
  5, 7, 9, 20 ,7
  5, 7, 8, 20 ,7
  5, 7, 8, 9 ,20

5,20,9,8,7部分重复4次,我怎样才能删除它?

for(i=0; i<r; i++)
{
  System.out.print(data[i]+"\t");
}
  System.out.print("\n");
  for(i=0; i<size; i++)
{
    smallest=i;
    for(j=i+1; j<size; j++)
    {
        if(data[i] > data[j] )
        {
            temp = data[j];
            data[j] = data[smallest];
            data[smallest] = temp;
        }

            for(k=0; k<size; k++)
            System.out.print(data[k]+"\t");
            System.out.print("\n");
         }

    }

2 个答案:

答案 0 :(得分:0)

5 20 9 8 7正在发生,因为一旦你将5放在0点,它就不再需要交换了。 5是数组中最小的项,因此它只需要检查数组中的其他元素以确保它。删除这些迭代的唯一方法是更改​​排序方法

答案 1 :(得分:0)

错误代码显示数据: U删除没有循环j的循环

for(i=0; i<r; i++)
{
  System.out.print(data[i]+"\t");
}
  System.out.print("\n");
  for(i=0; i<size; i++)
{
    smallest=i;
    for(j=i+1; j<size; j++)
    {
        if(data[i] > data[j] )
        {
            temp = data[j];
            data[j] = data[smallest];
            data[smallest] = temp;
        }
   }
   for(k=0; k<size; k++)
   {
         System.out.print(data[k]+"\t");
         System.out.print("\n");
   }
    }