Java快速排序问题,谁能帮我看看下面的程序为什么出错了!刚学习,不大懂!
classQuickSort2{publicvoidQuickSort(intleft,intright,intarr[]){intl=left;intr=right;i...
class QuickSort2
{
public void QuickSort(int left,int right,int arr[])
{
int l=left;
int r=right;
int pivotKey=arr[l];
//int temp;
if(l<r)
{
while(l<r)
{
while(l<r && arr[r]>=pivotKey) r--;
if(l<r)
{
arr[l]=arr[r];
}
while(l<r && arr[l]<=pivotKey) l++;
if(l<r)
{
arr[r]=arr[l];
}
arr[l]=pivotKey;
QuickSort(0,l-1,arr);
QuickSort(l+1,arr.length-1,arr);
}
}
}
} 展开
{
public void QuickSort(int left,int right,int arr[])
{
int l=left;
int r=right;
int pivotKey=arr[l];
//int temp;
if(l<r)
{
while(l<r)
{
while(l<r && arr[r]>=pivotKey) r--;
if(l<r)
{
arr[l]=arr[r];
}
while(l<r && arr[l]<=pivotKey) l++;
if(l<r)
{
arr[r]=arr[l];
}
arr[l]=pivotKey;
QuickSort(0,l-1,arr);
QuickSort(l+1,arr.length-1,arr);
}
}
}
} 展开
2个回答
展开全部
帮你改了一下:
public class Point{
public static void main(String[] args) {
int[] a = ;
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;
//将比中心记录大的移到高端
}
a[left] = pivot; //中心移到正确位置
return left; //返回中心位置
}
public static void quickSort(int[] a, int left, int right) {
if(left >= right - 1)
return;
int pivot = Partition(a,left,right);
quickSort(a, left, pivot-1);
quickSort(a, pivot+1, right);
}
}
如果对您有帮助,请记得采纳为满意答案,谢谢!祝您生活愉快!
vaela
public class Point{
public static void main(String[] args) {
int[] a = ;
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;
//将比中心记录大的移到高端
}
a[left] = pivot; //中心移到正确位置
return left; //返回中心位置
}
public static void quickSort(int[] a, int left, int right) {
if(left >= right - 1)
return;
int pivot = Partition(a,left,right);
quickSort(a, left, pivot-1);
quickSort(a, pivot+1, right);
}
}
如果对您有帮助,请记得采纳为满意答案,谢谢!祝您生活愉快!
vaela
展开全部
public class QuickSort {
public void sort(int arr[], int left,int right) {
int l, r;
int pivotKey, temp;
l = left;
r = right;
pivotKey = arr[left];
while (true) {
while ((++l) < right - 1 && arr[l] < pivotKey)
;
while ((--r) > left && arr[r] > pivotKey)
;
if (l >= r)
break;
temp = arr[l];
arr[l] = arr[r];
arr[r] = temp;
}
arr[left] = arr[r];
arr[r] = pivotKey;
if (left < r)
sort(arr, left, r);
if (right > l)
sort(arr, l, right);
}
// public static void main(String[] args) {
// QuickSort sort = new QuickSort();
// int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
// sort.sort(arr, 0, 8);
// for (int i = 0; i < 9; i++) {
// System.out.println(arr[i]);
// }
// }
}
public void sort(int arr[], int left,int right) {
int l, r;
int pivotKey, temp;
l = left;
r = right;
pivotKey = arr[left];
while (true) {
while ((++l) < right - 1 && arr[l] < pivotKey)
;
while ((--r) > left && arr[r] > pivotKey)
;
if (l >= r)
break;
temp = arr[l];
arr[l] = arr[r];
arr[r] = temp;
}
arr[left] = arr[r];
arr[r] = pivotKey;
if (left < r)
sort(arr, left, r);
if (right > l)
sort(arr, l, right);
}
// public static void main(String[] args) {
// QuickSort sort = new QuickSort();
// int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
// sort.sort(arr, 0, 8);
// for (int i = 0; i < 9; i++) {
// System.out.println(arr[i]);
// }
// }
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询