class Solution {

    public static void main(String[] args) {
        int[] arr = new int[]{4, 5, 8, 1, 7, 2, 6, 3};
        int[] newArr = sortArray(arr);
        for (int i : newArr) {
            System.out.println(i);
        }
    }


public static int[] sortArray(int[] nums) {
if (nums.length <= 1) return nums;

int left = 0, right = nums.length - 1, base = nums[0];
mark:
while (true) {
while (true) {
if (right <= left) break mark;
if (nums[right] <= base) {
nums[left] = nums[right];
left++;
break;
}
right--;
}

while (true) {
if (right <= left) break mark;
if (nums[left] >= base) {
nums[right] = nums[left];
right--;
break;
}
left++;
}
}

nums[left] = base;

int[] leftArr = sortArray(slice(nums, 0, left - 1));
int[] rightArr = sortArray(slice(nums, right + 1, nums.length - 1));
return concate(leftArr, new int[]{base}, rightArr);
}


public static int[] slice(int[] arr, int start, int end) {
int len = end - start + 1;
int[] ts = new int[len];
int offset = 0;
while (offset < len) {
ts[offset] = arr[offset + start];
offset++;
}
return ts;
}

public static int[] concate(int[]... arr) {
int total = 0;
int[] result;
for (int i = 0, len = arr.length; i < len; i++) {
total += arr[i].length;
}
result = new int[total];
int index = 0;
for (int i = 0, len = arr.length; i < len; i++) {
int[] ele = arr[i];
for (int i1 : ele) {
result[index++] = i1;
}
}
return result;
}
}

 

 posted on 2023-06-21 15:42  laremehpe  阅读(6)  评论(0编辑  收藏  举报