Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.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 快速排序不起作用,认为交换是问题所在,免责声明我必须使用提供给我的快速排序方法 试试看{ 对于(i=0;i=j){ 打破 } 掉期(数据[i],数据[j]); 掉期(数据[i],数据[right]); 快速排序(数据,左,i-1); 快速排序(数据,i+1,右); } } } 静态无效交换(整数左、整数右){ int数组[]=新int[19]; int temp=数组[左]; 数组[左]=数组[右]; 数组[右]=温度;_Java_Arrays_Quicksort_Swap - Fatal编程技术网

Java 快速排序不起作用,认为交换是问题所在,免责声明我必须使用提供给我的快速排序方法 试试看{ 对于(i=0;i=j){ 打破 } 掉期(数据[i],数据[j]); 掉期(数据[i],数据[right]); 快速排序(数据,左,i-1); 快速排序(数据,i+1,右); } } } 静态无效交换(整数左、整数右){ int数组[]=新int[19]; int temp=数组[左]; 数组[左]=数组[右]; 数组[右]=温度;

Java 快速排序不起作用,认为交换是问题所在,免责声明我必须使用提供给我的快速排序方法 试试看{ 对于(i=0;i=j){ 打破 } 掉期(数据[i],数据[j]); 掉期(数据[i],数据[right]); 快速排序(数据,左,i-1); 快速排序(数据,i+1,右); } } } 静态无效交换(整数左、整数右){ int数组[]=新int[19]; int temp=数组[左]; 数组[左]=数组[右]; 数组[右]=温度;,java,arrays,quicksort,swap,Java,Arrays,Quicksort,Swap,这只是整个程序的代码片段。每次涉及到快速排序函数时,我都会得到一个越界错误。我使用19作为数组,因为这就是文件的大小。我尝试了20次,以查看它是否修复了它,但没有运气 编辑:我在下面提供了更新的代码,以反映所做的更改,但仍然会出现越界错误 try { for (i = 0; i < data.length; i++) { working[i] = data[i]; } FileWrit

这只是整个程序的代码片段。每次涉及到快速排序函数时,我都会得到一个越界错误。我使用19作为数组,因为这就是文件的大小。我尝试了20次,以查看它是否修复了它,但没有运气

编辑:我在下面提供了更新的代码,以反映所做的更改,但仍然会出现越界错误

try {
            for (i = 0; i < data.length; i++) {
                working[i] = data[i];
            }

            FileWriter fw3 = new FileWriter("quicksort.dat");

            long startTime3 = System.nanoTime();

            quickSort(working,0, working.length - 1);

            long endTime3 = System.nanoTime();

            long totalTime3 = endTime3 - startTime3;

            System.out.println("The time to complete the quick sort was :" + totalTime3 + " nano seconds");

            for (i = 0; i < working.length; i++) {
                fw3.write(Integer.toString(working[i]) + "\n");
            }
            System.out.println("The file has been sorted by quick sort and output to quicksort.dat \n");

            fw3.close();
        } catch (IOException e) {
            System.out.println(e);
        }




static void quickSort(int data[], int left, int right) {

        int i, j;
        int partition;
        if (right > left) {
            partition = data[right];
            i = left - 1;
            j = right;

            for (;;) {
                while (data[++i] < partition);
                while (data[--j] > partition);
                if (i >= j) {
                    break;
                }
                swap(data[i], data[j]);
                swap(data[i], data[right]);
                quickSort(data, left, i - 1);
                quickSort(data, i + 1, right);

            }
        }
    }

    static void swap(int left, int right) {
        int array[] = new int[19];
        int temp = array[left];
        array[left] = array[right];
        array[right]=temp;
静态void快速排序(int-data[],int-left,int-right){
int i,j;
整数划分;
如果(右>左){
分区=数据[右];
i=左-1;
j=右;
对于(;;){
while(数据[++i]<分区);
while(数据[--j]>分区);
如果(i>=j){
打破
}
交换(数据,i,j);
交换(数据,i,右);
快速排序(数据,左,i-1);
快速排序(数据,i+1,右);
}
}
}
静态无效交换(int数组[],int左,int右){
int temp=数组[左];
数组[左]=数组[右];
数组[右]=温度;
}

您已将掉期声明为:

    static void quickSort(int data[], int left, int right) {

    int i, j;
    int partition;
    if (right > left) {
        partition = data[right];
        i = left - 1;
        j = right;

        for (;;) {
            while (data[++i] < partition);
            while (data[--j] > partition);
            if (i >= j) {
                break;
            }
            swap(data, i, j);
            swap(data, i, right);
            quickSort(data, left, i - 1);
            quickSort(data, i + 1, right);

        }
    }
}


static void swap(int array[], int left, int right) {
     int temp = array[left];        
     array[left] = array[right];    
     array[right] = temp;          

}
因此,参数是数组中的索引

但是,您将其称为:

void swap(int left, int right)
因此,您正在数组中传递值

尝试将呼叫更改为:

swap(data[i], data[j]);
编辑以添加:

必须指出的是,上面的问题只是排序算法的一个问题。另一个问题是
交换
算法实际上不交换任何东西。它创建一个局部数组变量
数组
,对其进行操作,然后返回(因此丢弃该局部变量)

如果您的任务是输出一个已排序的数字列表,并且必须使用提供的排序代码对数字进行排序,那么该任务是不可能的,因为提供的排序代码作为排序算法存在无可救药的缺陷;它不排序(正如您自己发现的那样),并且与正确实现快速排序相比存在明显的严重问题(例如,您可以将答案与此处进行比较:)

编辑以添加以下修订代码:

修改后的排序代码仍然毫无希望地失效。它不是一个正确的快速排序实现,仍然不能正确排序

例如,我尝试运行它,最后一个元素是最大的:

swap(i, j);
结果:没有排序-该方法直接命中
if(i>=j){break;}
,i==7和j==6,因此什么也没做

相比之下,我上面链接的答案中的方法排序正确,因此您可以将给出的方法与该方法进行比较,或者与其他已建立的文章进行比较(例如,在internet上搜索
java quicksort
,有很多)

正如前面提到的,排序肯定需要修复

尝试使用以下方法签名重新实现排序函数

int data[] = {23, 8, 19, 35, 2, 12, 7, 64 };

这是java吗?考虑添加一个语言,是java,只是添加了ITI,当然会尝试,但是我将不得不找到一个解决方案,因为教授很想让他的快速排序方法不被触动。但是我很感激它,并且会尝试这个。让我知道它是怎么回事。你可以尝试改变数组。(和快速排序)从int到String,以便真正区分(即给出编译错误!)当索引和值被错误地混合时,交换不起作用,但是数组必须是int,因为我们排序的文件是整数。谢谢您的帮助。他承认他犯了错误,但我似乎仍然不能使它工作。我将更新我原来的帖子。是的,教授错了,给了我们C++代码。我已经尝试过他所建议的。ted又来了,但我还是遇到了一个错误。我还修复了交换方法来处理新函数。也许你的教授希望你以艰苦的方式学习,或者希望学生提问。无论如何,我可能没有猜到问题会以这样的方式结束!基于我对他的了解,我更倾向于相信这是一个错误NGZG611——如果这是C++代码,那么交换可以像原来显示的那样使用交换函数中的引用:<代码>交换(int和左边,int和右边)< /C>。
void sort(int[] arr, int leftIndex, int rightIndex) {
// swap code goes here
}