int pivotpos = low; int Vector[] = null; for (int i = 0; i <= dataList.length; i++) { Vector[i] = dataList[i]; }
Exception in thread "main" java.lang.NullPointerException at org.demo.QuickSort.partition(QuickSort.java:21) at org.demo.QuickSort.quickSort(QuickSort.java:8) at org.demo.QuickSort.main(QuickSort.java:49)Vector[i] = dataList[i]; int pivotpos = partition(dataList,left,right); qs.quickSort(dataList, 0, 6); 这三句报错
我给你修改过了。也指出了你的错误。注意你的for循环的 <= 与 < 的使用的情形。你这里的问题很严重啊,出现了2个错误。 package com.wanmei.test;public class QuickSort { // private int dataList[] = {5,7,100,-2,0,10,121}; void quickSort(int dataList[], int left, int right) { if (left < right) { int pivotpos = partition(dataList, left, right); quickSort(dataList, left, pivotpos - 1); quickSort(dataList, pivotpos + 1, right); } //for (int i = 0; i <= dataList.length; i++) {//这里不能是 <= 会造成数组的越界,应该是 < for (int i = 0; i < dataList.length; i++) { System.out.println(dataList[i] + " "); } } int partition(int dataList[], int low, int high) { int pivotpos = low; //int Vector[] = null;//你这里给int数组赋予的是空值,当然在后面的调用的时候会出错了。 int vector[] = new int[dataList.length];; //for (int i = 0; i <= dataList.length; i++) {//这里不能是 <= 会造成数组的越界,应该是 < for (int i = 0; i < dataList.length; i++) { vector[i] = dataList[i]; } int pivot = vector[low]; for (int i = low + 1; i <= high; i++) { if (vector[i] < pivot) { pivotpos++; if (pivotpos != i) swap(vector[pivotpos], vector[i]); } } vector[low] = vector[pivotpos]; vector[pivotpos] = pivot; return pivotpos; } void swap(int a, int b) { int x = 0; x = a; a = b; b = x; } public static void main(String[] args) { // TODO Auto-generated method stub int[] dataList = { 5, 7, 100, -2, 0, 10, 121 }; QuickSort qs = new QuickSort(); qs.quickSort(dataList, 0, 6); }}
int Vector[] = new int[dataList.length];
at org.demo.QuickSort.partition(QuickSort.java:21) at org.demo.QuickSort.quickSort(QuickSort.java:8) at org.demo.QuickSort.main(QuickSort.java:49) 这三行出错,楼主可以自己检查代码,打断点来跟踪,慢慢就学会调试了。
void quickSort(int dataList[],int left,int right){
if(left<right){
int pivotpos = partition(dataList,left,right);
quickSort(dataList,left,pivotpos - 1);
quickSort(dataList,pivotpos + 1,right);
}
for(int i =0; i <=dataList.length;i++){
System.out.println(dataList[i] + " ");
}
}
int partition(int dataList[],int low,int high){
int pivotpos = low;
int Vector[] = null;
for(int i = 0;i <= dataList.length;i++){
Vector[i] = dataList[i];
}
int pivot = Vector[low];
for(int i = low + 1;i <= high;i++){
if(Vector[i] < pivot){
pivotpos++;
if(pivotpos != i ) swap(Vector[pivotpos],Vector[i]);
}
}
Vector[low] = Vector[pivotpos];
Vector[pivotpos] = pivot;
return pivotpos;
}
void swap(int a,int b){
int x = 0;
x = a;
a = b;
b = x;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] dataList = {5,7,100,-2,0,10,121};
QuickSort qs = new QuickSort();
qs.quickSort(dataList, 0, 6);
}}
int Vector[] = null;
for (int i = 0; i <= dataList.length; i++) {
Vector[i] = dataList[i];
}
at org.demo.QuickSort.partition(QuickSort.java:21)
at org.demo.QuickSort.quickSort(QuickSort.java:8)
at org.demo.QuickSort.main(QuickSort.java:49)Vector[i] = dataList[i];
int pivotpos = partition(dataList,left,right);
qs.quickSort(dataList, 0, 6);
这三句报错
package com.wanmei.test;public class QuickSort { // private int dataList[] = {5,7,100,-2,0,10,121};
void quickSort(int dataList[], int left, int right) {
if (left < right) {
int pivotpos = partition(dataList, left, right);
quickSort(dataList, left, pivotpos - 1);
quickSort(dataList, pivotpos + 1, right);
}
//for (int i = 0; i <= dataList.length; i++) {//这里不能是 <= 会造成数组的越界,应该是 <
for (int i = 0; i < dataList.length; i++) {
System.out.println(dataList[i] + " ");
}
} int partition(int dataList[], int low, int high) {
int pivotpos = low;
//int Vector[] = null;//你这里给int数组赋予的是空值,当然在后面的调用的时候会出错了。
int vector[] = new int[dataList.length];;
//for (int i = 0; i <= dataList.length; i++) {//这里不能是 <= 会造成数组的越界,应该是 <
for (int i = 0; i < dataList.length; i++) {
vector[i] = dataList[i];
}
int pivot = vector[low];
for (int i = low + 1; i <= high; i++) {
if (vector[i] < pivot) {
pivotpos++;
if (pivotpos != i)
swap(vector[pivotpos], vector[i]); } }
vector[low] = vector[pivotpos];
vector[pivotpos] = pivot; return pivotpos;
} void swap(int a, int b) {
int x = 0;
x = a;
a = b;
b = x;
} public static void main(String[] args) {
// TODO Auto-generated method stub
int[] dataList = { 5, 7, 100, -2, 0, 10, 121 };
QuickSort qs = new QuickSort();
qs.quickSort(dataList, 0, 6);
}}
at org.demo.QuickSort.quickSort(QuickSort.java:8)
at org.demo.QuickSort.main(QuickSort.java:49)
这三行出错,楼主可以自己检查代码,打断点来跟踪,慢慢就学会调试了。
可是为什么没有排序啊··这是快速排序算法啊你的问题是:为什么会报错,而不是“这个算法”该如何实现。我当然没有修改你的算法了。为什么没有排序,应该自己检查一下代码的逻辑,看看自己什么地方出错了。可以实现用伪代码把逻辑写出来,建立模型,分析一下,然后再逻辑正确的前提下,在写你的java代码。中间如果代码出错,你应该学会用IDE的debug工具,进行代码分析。
for (int i : dataList) {
System.out.println(i);
} }不清楚你为什么要自己写一套排序的算法。为了练手?可以的。不过,你可以先参考人家JDK给出的API,借鉴人家的经验。或者你的排序有什么特殊的要求?也需要自己来写。那么就先思考整个完整的排序算法,写在纸上,或者画出排序的流程图。然后再去编码。