数组越界气泡排序

数组越界气泡排序

我一直在使索引超出范围错误,并且我不知道为什么。我觉得它不应该超出范围,因为对数比开始的列表元素数少一。

这是我的代码:

`

    package main;

import java.util.Random;

import java.io.File;
import java.io.IOException;

import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;

import jxl.read.biff.BiffException;

import jxl.write.Label;
import jxl.write.Number;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;

    public class BubbleSort
    {

        static int Bubble_Sort_return_int (int[] list, int n)
        {
            int comparison_count = 0;
            int number_pairs = n -1;
            boolean swapped_elements = true;
            while (swapped_elements == true)
                    {

                        for (int i = 1; i < number_pairs ; i++)
                        {
                            swapped_elements = false;
                            comparison_count++;
                            if (list[i] > list[i-1])
                            {
                                int swap_element = list[i -1];
                                list[i-1] = list[i];
                                list[i] = swap_element;
                                swapped_elements = true;
                            }
                        }

                        number_pairs = number_pairs - 1;
                    }
            return comparison_count;
        }

        public static void main (String args[])throws IOException, WriteException
        {
            Random one_to_ten = new Random();
            int list [][] = new int[1000][1000];
            int[] comparison_count_list_after_one_pass = new int[1000];
            for (int i = 0; i < 1000; i++)
            {
                for (int j = 0; j < i+1; j++)
                {
                    list[i][j] = one_to_ten.nextInt(10);
                }
            }
            for (int i = 0; i < 1000; i++)
            {
                comparison_count_list_after_one_pass[i] = Bubble_Sort_return_int(list[i], i + 1);
            }
    }
    }

最佳答案

您的逻辑在Bubble_Sort_return_int中存在缺陷。第一次调用时,n等于1,而number_pairs等于0。 for循环(i < number_pairs)中的比较失败,并且number_pairs递减为-1。这一直持续到number_pairs-2147483648递减到2147483647。只有这样,for循环才能执行任何操作。在循环中i等于1000的点,list[i]导致ArrayIndexOutOfBoundsException异常。

关于java - 数组越界气泡排序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29479353/

10-09 04:36