import java.util.Random;
public class MySort {
public static void main(String[] args) {
int[] intArray = new int[10];
for(int i=0; i<intArray.length; i++) {
int random = (int) (new Random(System.currentTimeMillis()).nextInt(100));
intArray[i] = random;
}
for(int i : intArray) {
System.out.print(i + " ");
}
quickSort2(intArray, 0, intArray.length - 1);
System.out.println();
for(int i : intArray) {
System.out.print(i + " ");
}
}
private static void quickSort2(int[] array, int l, int r) {
if(l >= r) {
return;
}
/*
i:要比较数组最左边的位置
j:要比较数组最右边的位置
tmp1:记录被比较的数组,用户一次比对完毕后放到数组的中间位置
tmp2:一次中的一轮比对完毕后用于数据交换的临时变量
*/
int i=l,j=r,tmp1=array[l],tmp2;
// 如果i和j没有相等,说明一轮没有对比完,需要继续比对
while(i < j) {
// 比tmp1大的全部放到右边,符合条件就j--
while(array[j] >= tmp1 && i < j) {
j--;
}
// 比tmp1小的全部放到左边,符合条件就i++
while(array[i] <= tmp1 && i < j) {
i++;
}
// 如果i=j就不用交换了,走到这里说明一次中的一轮比对完毕
if(i < j) {
// 把不符合的数字做位置交换
tmp2 = array[i];
array[i] = array[j];
array[j] = tmp2;
}
}
// 走到这里说明一次比对完毕
// ---------------------------------------------------
// 把比比对值小的放到数据最左边
array[l] = array[i];
// 把比对的值放到数组中间
array[i] = tmp1;
// 重复上述步骤
// ---------------------------------------------------
// 继续比对小的值
quickSort2(array, l, i-1);
// 继续比对大的值
quickSort2(array, j+1, r);
}
/*private static int[] quickSort(int[] array, int l, int r) {
int i=l, j=r, m=array[l];
if(l < r) {
while(i<j) {
while(i < j && array[j] > m) {
j--;
}
if(i < j) {
array[i++] = array[j];
}
while(i < j && array[i] < m) {
i++;
}
if(i < j) {
array[j--] = array[i];
}
}
array[i] = m;
quickSort(array, 0, j -1);
quickSort(array, i+1, array.length - 1);
}
return array;
}*/
}