用Java实现利用快速排序算法将读入的n个数从小到大排序后输出的代码和解析
时间: 2024-01-25 13:04:34 浏览: 85
下面是使用Java实现快速排序的代码和解析:
```java
public class QuickSort {
public static void main(String[] args) {
int[] nums = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5};
quickSort(nums, 0, nums.length - 1);
for (int num : nums) {
System.out.print(num + " ");
}
}
public static void quickSort(int[] nums, int left, int right) {
if (left < right) {
int pivotIndex = partition(nums, left, right);
quickSort(nums, left, pivotIndex - 1);
quickSort(nums, pivotIndex + 1, right);
}
}
public static int partition(int[] nums, int left, int right) {
int pivot = nums[right];
int i = left;
for (int j = left; j < right; j++) {
if (nums[j] < pivot) {
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
i++;
}
}
int temp = nums[i];
nums[i] = nums[right];
nums[right] = temp;
return i;
}
}
```
快速排序算法的基本思想是:选定一个基准数(pivot),将数组分为两部分,一部分是小于等于基准数的,另一部分是大于基准数的。然后对这两部分分别进行递归排序,最终得到整个数组有序。
在上面的Java代码中,`quickSort`方法就是递归排序的方法。其参数`left`和`right`分别表示当前排序的子数组的左右边界。如果`left`小于`right`,说明当前子数组中有两个及以上的元素,需要进行排序。此时,我们选定当前子数组中最后一个元素作为基准数,调用`partition`方法进行分区操作,将数组分为两部分,一部分是小于基准数的,另一部分是大于等于基准数的。然后对这两部分分别递归调用`quickSort`方法,直到子数组中只有一个元素,排序完成。
`partition`方法用于对当前子数组进行分区操作。它的参数`left`和`right`表示当前子数组的左右边界,`pivot`表示选定的基准数。我们从左往右遍历数组,如果当前遍历到的元素小于基准数,就将其与`i`位置的元素交换,并将`i`加1。最后将基准数放到`i`位置,分区操作完成,并返回基准数的位置。
最后,我们在`main`方法中定义一个测试数组`nums`,调用`quickSort`方法进行排序,并输出排序结果。
阅读全文