练习
2.3-4
int[] numbers = new int[]{9, 8, 7, 6, 5};
sort(numbers, numbers.length - 1);
for (int i = 0; i <= numbers.length - 1; i++) {
System.out.println("numbers = " + numbers[i]);
}
public static void sort(int[] numbers, int i) {
if (i > 0) {
sort(numbers, i - 1);
int cur = numbers[i];
int j = i - 1;
while (j >= 0 && numbers[j] > cur) {
numbers[j + 1] = numbers[j];
j--;
}
numbers[j + 1] = cur;
}
}
思考题
2-4逆序对
public static void antiNumber(int[] a, int p, int q, int r){
int n1 = q - p + 1;
int n2 = r - q;
//数组没使用0号元素
int[] L = new int[n1 + 1];
int[] R = new int[n2 + 1];
for (int i = 1; i < n1 + 1; i++){
L[i] = a[p + i - 1];
}
for (int j = 1;j < n2 + 1; j++){
R[j] = a[q + j];
}
int i, j;
//移动到末尾
i = L.length - 1;
j = R.length - 1;
while (i > 0 && j > 0){
if (L[i] > R[j]){
sCount += j;
a[r--] = L[i];
i --;
}else {
a[r--] = R[j];
j--;
}
}
if (i != 0){
a[r--] = L[i];
}
if (j != 0){
a[r--] = R[j];
}
}