优化这段代码public class QuickSort implements IArraySort { @Override public int[] sort(int[] sourceArray) throws Exception { // 对 arr 进行拷贝,不改变参数内容 int[] arr = Arrays.copyOf(sourceArray, sourceArray.length); return quickSort(arr, 0, arr.length - 1); } private int[] quickSort(int[] arr, int left, int right) { if (left < right) { int partitionIndex = partition(arr, left, right); quickSort(arr, left, partitionIndex - 1); quickSort(arr, partitionIndex + 1, right); } return arr; } private int partition(int[] arr, int left, int right) { // 设定基准值(pivot) int pivot = left; int index = pivot + 1; for (int i = index; i <= right; i++) { if (arr[i] < arr[pivot]) { swap(arr, i, index); index++; } } swap(arr, pivot, index - 1); return index - 1; } private void swap(int[] arr, int i, int j) { int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } }
时间: 2023-05-12 17:04:37 浏览: 58
这段代码是快速排序的实现,可以对一个整型数组进行排序。在排序过程中,先选取一个基准值,然后将数组中小于基准值的元素放在基准值的左边,大于基准值的元素放在基准值的右边,最后递归地对左右两个子数组进行排序。这个实现中使用了递归算法,可以对较大的数组进行排序。如果数组长度较小,可以考虑使用插入排序等其他算法。
相关问题
sortArray(int[] arr,String sort)函数
该函数的作用是对一个整数数组进行排序,其中sort参数指定了排序方式,可以是"asc"表示升序排列,也可以是"desc"表示降序排列。
函数的签名如下:
public static int[] sortArray(int[] arr, String sort)
函数的参数说明:
- arr:待排序的整数数组
- sort:排序方式,可以是"asc"表示升序排列,也可以是"desc"表示降序排列。
函数的返回值是排序后的整数数组。
函数的实现思路:
根据sort参数的值,选择不同的排序方式,例如如果是"asc",则使用快速排序算法对数组进行升序排列,如果是"desc",则先对数组进行升序排列,然后再将数组反转得到降序排列。
函数的具体实现:(使用快速排序算法)
public static int[] sortArray(int[] arr, String sort) {
int len = arr.length;
if (len < 2) {
return arr;
}
if (sort.equals("asc")) {
quickSort(arr, 0, len - 1);
} else if (sort.equals("desc")) {
quickSort(arr, 0, len - 1);
reverseArray(arr);
}
return arr;
}
private static void quickSort(int[] arr, int left, int right) {
if (left >= right) {
return;
}
int pivot = arr[(left + right) / 2];
int i = left;
int j = right;
while (i <= j) {
while (arr[i] < pivot) {
i++;
}
while (arr[j] > pivot) {
j--;
}
if (i <= j) {
swap(arr, i, j);
i++;
j--;
}
}
quickSort(arr, left, j);
quickSort(arr, i, right);
}
private static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
private static void reverseArray(int[] arr) {
int len = arr.length;
for (int i = 0; i < len / 2; i++) {
int temp = arr[i];
arr[i] = arr[len - i - 1];
arr[len - i - 1] = temp;
}
}
quickSort(int[] arr, int low, int high)
`quickSort(int[] arr, int low, int high)` 是快速排序算法中的一个递归函数,用于对数组的指定范围进行排序。
参数说明:
- `arr`:待排序的数组
- `low`:排序范围的起始索引
- `high`:排序范围的结束索引
函数实现:
1. 如果 `low` 小于 `high`,则执行以下步骤:
- 选择基准元素(pivot):通常选择数组的最后一个元素 `arr[high]` 作为基准元素。
- 调用 `partition()` 函数,将数组划分为两部分,并返回基准元素的索引 `pivotIndex`。
- 递归调用 `quickSort()` 函数对基准元素左边的子数组进行排序,即调用 `quickSort(arr, low, pivotIndex - 1)`。
- 递归调用 `quickSort()` 函数对基准元素右边的子数组进行排序,即调用 `quickSort(arr, pivotIndex + 1, high)`。
2. 如果 `low` 大于等于 `high`,则不执行任何操作,直接返回。
通过不断地划分和递归排序,最终整个数组就会被排序。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)