Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 堆排序的不正确实现_Java_Debugging_Sorting_Heapsort - Fatal编程技术网

Java 堆排序的不正确实现

Java 堆排序的不正确实现,java,debugging,sorting,heapsort,Java,Debugging,Sorting,Heapsort,这是从网站上获取的修改后的实现 import java.io.File; import java.io.FileNotFoundException; import java.util.*; public class HeapSort { static int heapsize; public static void main(String args[]) { Vector<Integer> container = new Vector&

这是从网站上获取的修改后的实现

import java.io.File;
import java.io.FileNotFoundException;
import java.util.*;

public class HeapSort 
{
    static  int heapsize;

    public static void main(String args[])
    {
        Vector<Integer> container = new Vector<Integer>(); // container used to store txt file integers
        Scanner myScanner = new Scanner("foo"); // variable used to read file
        String userinput="data1.txt";


        try
        {
            //open filename
            //got problem , must think how to do relative path instead of absolute path
             File inputfile = new File("C:\\Users\\8382c\\workspace\\AdvanceAlgorithmA3_Heapsort\\src\\" + userinput);
             myScanner = new Scanner(inputfile);

        }
        catch(FileNotFoundException e)
        {
            System.out.println("File cant be found");
        }



        String line = myScanner.nextLine(); //read 1st line which contains the number of numbers to be sorted

        while (myScanner.hasNext())
        {
            container.add(myScanner.nextInt());
        }



        heapsize = container.size();

        System.out.println(heapsize);

        sort(container);

        int x =10;

        /*for (int i=0 ; i < container.size() ; i ++)
        {
            System.out.println(container.get(i));
        }*/


        //http://www.sanfoundry.com/java-program-implement-heap-sort/


    }

      public static void swap(Vector<Integer> container, int i, int j)
      {
            /*int tmp = arr[i];
            arr[i] = arr[j];
            arr[j] = tmp;*/

          int tmp = container.get(i);
          container.set(i, container.get(j));
          container.set(j, tmp);

      }   

      public static void maxheap(Vector<Integer> container, int i) //ensure max number is the parent
        { 
            int left = 2*i ;
            int right = 2*i + 1;
            int max = i;
            if (left <= heapsize && container.get(left) > container.get(i));
                max = left;
            if (right <= heapsize && container.get(right) > container.get(max))        
                max = right;

            if (max != i)
            {
                swap(container, i, max);
                maxheap(container, max);
            }
        } 

        public static void heapify(Vector<Integer> container)  //built a heap
        {
            heapsize = container.size()-1;
            for (int i = heapsize/2; i >= 0; i--)
                maxheap(container, i);        
        }


        public static void sort(Vector<Integer> container)
        {       
            heapify(container);        
            for (int i = heapsize; i > 0; i--)
            {
                swap(container,0, i);
                heapsize = heapsize-1;
                maxheap(container, 0);
            }
        }  


}
我的调试器不起作用,因为每次我跨过函数max heap时,我都会得到尚未解决的问题


我不明白数组越界错误是从哪里产生的,我在过去的两个小时里查看了实现代码,没有发现任何错误,有人能告诉我我的代码有什么问题吗???

这行末尾有一个分号:

            if (left <= heapsize && container.get(left) > container.get(i));
这意味着下一行总是在运行,而不仅仅是在条件为真时。去掉分号,你就可以走了

            if (left <= heapsize && container.get(left) > container.get(i));