java快速排序问题

来源:百度知道 编辑:UC知道 时间:2024/06/15 04:31:17
public void sort(int[] a) {
quickSort(a, 0, a.length - 1);
for (int i = 0; i < a.length; i++) {
System.out.print(a[i]);
}
}

public void quickSort(int[] a, int left, int right) {
int i, j;
int pivot;
int temp;
i = left;
j = right;
pivot = a[left];
if (i < j) {
do {
while (a[i] < pivot && i < right) {
i++;
}
while (a[j] > pivot && j > left) {
j--;
System.out.println(j);
}
if (i < j) {
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
} while (i < j);
}
if (i > j) {
temp = a[left];
a[left] = a[j];
a[j] = temp;
}

quickSort(a, left, j - 1);
quickSort(a, j + 1, right);
}

说我数组下标溢出,我都找了一下午错误

帮你改了一下:
public class Point{
public static void main(String[] args) {
int[] a = {4,63,2,4,4,6,43,2,3};
quickSort(a, 0, a.length - 1);

for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + ",");
}
}
static int Partition(int[] a, int left, int right)
{
int tmp;

//进行一趟快速排序,返回中心记录位置
int pivot = a[left];//把中心置于a[0]
while (left < right)
{
while(left<right && a[right]>=pivot)
right--;
//将比中心记录小的移到低端
tmp = a[right];
a[right] = a[left];
a[left] = tmp;
while(left<right && a[left]<=pivot)
left++;
tmp = a[right];
a[right] = a[left];
a[left] = tmp;
//