LZ是要做快排么?这边有个类似的,LZ可以参考下,感觉左右值交换那块有点差异。public class QuickSort { public static int N = 10; public static void main(String[] args) { int[] a = new int[N]; System.out.println("随机生产的数组a[N]为:"); for (int i = 0; i < N; i++) { Random r = new Random(); a[i] = Math.abs(r.nextInt()) % 100; System.out.println("a[" + i + "]= " + a[i]); } //快速排序,升序排列a[N]数组 quickSort(a, 0, N - 1);
//排序后的数组显示: System.out.println("排序后的数组为:"); for (int i = 0; i < N; i++) { System.out.println("a[" + i + "]= " + a[i]); } } private static void quickSort(int[] a, int l, int r) { //中值 int m = (l + r) / 2; if (m >= N - 1 || l >= r) { return; } //左下标 int i = l; //右下标 int j = r; while (i < j) { //寻找左侧大于中值的下标 while (i < m && a[i] < a[m]) { i++; } //寻找右侧小于中值的下标 while (j > m && a[j] > a[m]) { j--; }
{ public static int N = 10; public static void main(String[] args)
{
int[] a = new int[N];
System.out.println("随机生产的数组a[N]为:");
for (int i = 0; i < N; i++)
{
Random r = new Random();
a[i] = Math.abs(r.nextInt()) % 100;
System.out.println("a[" + i + "]= " + a[i]);
} //快速排序,升序排列a[N]数组
quickSort(a, 0, N - 1);
//排序后的数组显示:
System.out.println("排序后的数组为:");
for (int i = 0; i < N; i++)
{
System.out.println("a[" + i + "]= " + a[i]);
}
} private static void quickSort(int[] a, int l, int r)
{
//中值
int m = (l + r) / 2;
if (m >= N - 1 || l >= r)
{
return;
} //左下标
int i = l;
//右下标
int j = r; while (i < j)
{
//寻找左侧大于中值的下标
while (i < m && a[i] < a[m])
{
i++;
}
//寻找右侧小于中值的下标
while (j > m && a[j] > a[m])
{
j--;
}
//交换左右值
if(i <= j)
{
int temp = a[i];
a[i] = a[j];
a[j] = temp;
i++;
j--;
}
}
//此时,以i、j为分隔,将数组分为3块:左、中、右。并且左块所有数值都比中、右块小,右块所有值都比左、中块大。
//左块调用快速排序
if(j > l)
{
quickSort(a,l,j);
}
//右块调用快速排序
if(i < r)
{
quickSort(a,i,r);
}
}
}
endary = 19,计算得MID=2,调用quickRUN(arg, startflag, MID-1=1);
endary = 1,计算得MID=0,调用quickRUN(arg, startflag, MID-1=-1);
endary = -1;问题是你的quickRUN方法没有结束条件,
不管你求MID的方法是否正确