这个选择排序代码的错误是什么?错误:Arrayindexoutofboundsexception

时间:2015-08-05 05:20:06

标签: java arrays indexoutofboundsexception selection-sort

我正在尝试使用没有临时变量的交换来执行选择排序。我没有得到使用数组的正确方法。请帮忙。

import java.io.*;
import java.util.*;

class SelectionSort {
    public static void main(String args[]) {
        Scanner S=new Scanner(System.in);
        int size,i,j;
        System.out.println("How many elements");
        size = S.nextInt();
        int[] array = new int[size];
        System.out.println("Type the element in unsorted order");
        for (i=0; i<size; i++) {
            array[i]=S.nextInt();
        }
        for (i=0; i<size; i++) {
            for (j=i++; j<=size; j++) {
                if(array[j]<array[i]) {
                    array[i]=array[i]+array[j];
                    array[j]=array[i]-array[j];
                    array[i]=array[i]-array[j];
                }
            }
        }
        System.out.println("Elements in sorted order:");
        for(i=0; i<size; i++) {
            System.out.println(array[i]);
        }
    }
}

2 个答案:

答案 0 :(得分:1)

这不是选择排序。这是Bubble排序的Java实现。交换是在不使用临时变量的情况下执行的。

问题在于以下代码中的内部for循环。

for(i=0;i<size;i++)
{
  for(j=i++;j<=size;j++)
  {
    if(array[j]<array[i])
    {
      array[i]=array[i]+array[j];
      array[j]=array[i]-array[j];
      array[i]=array[i]-array[j];
    }
  }
}

您正在将变量递增两次。

按如下方式更改内循环,

同时将测试条件更改为j < size

for(j=i+1;j<size;j++)

答案 1 :(得分:1)

请参阅以下代码:将for (j=i++; j<=size; j++)更改为for (j=i+1; j<size; j++)

import java.util.Scanner;

class SelectionSort {
    public static void main(String args[]) {
        Scanner S = new Scanner(System.in);
        int size, i, j;
        System.out.println("How many elements");
        size = S.nextInt();
        int array[] = new int[size];
        System.out.println("Type the element in unsorted order");
        for (i = 0; i < size; i++) {
            array[i] = S.nextInt();
        }
        for (i = 0; i < size; i++) {
            for (j = i + 1; j < size; j++) {
                if (array[j] < array[i]) {
                    array[i] = array[i] + array[j];
                    array[j] = array[i] - array[j];
                    array[i] = array[i] - array[j];
                }
            }
        }
        System.out.println("Elements in sorted order:");
        for (i = 0; i < size; i++) {
            System.out.println(array[i]);
        }
    }
}