用Java代码写出快速排序
时间: 2023-08-31 07:22:14 浏览: 111
### 回答1:
Java代码实现快速排序可以使用以下方法:
1. 选择一个基准元素,通常是数组中的第一个元素
2. 创建两个指针,左指针指向第一个元素,右指针指向最后一个元素
3. 从右指针开始移动,移动到比基准元素小的位置
4. 从左指针开始移动,移动到比基准元素大的位置
5. 交换两个指针所指向的元素
6. 重复步骤3-5,直到左指针和右指针重合
7. 将基准元素与重合点所指向的元素交换
8. 对基准元素左右两侧的子数组分别重复步骤1-7public static void quickSort(int[] arr,int low,int high){
int i,j,temp,t;
if(low>high){
return;
}
i=low;
j=high;
//temp就是基准位
temp = arr[low]; while (i<j) {
//先看右边,依次往左递减
while (temp<=arr[j]&&i<j) {
j--;
}
//再看左边,依次往右递增
while (temp>=arr[i]&&i<j) {
i++;
}
//如果满足条件则交换
if (i<j) {
t = arr[j];
arr[j] = arr[i];
arr[i] = t;
} }
//最后将基准为与i和j相等位置的数字交换
arr[low] = arr[i];
arr[i] = temp;
//递归调用左半数组
quickSort(arr, low, j-1);
//递归调用右半数组
quickSort(arr, j+1, high);
}
### 回答2:
快速排序(Quick Sort)是一种常用的排序算法,基本思想是选取一个元素作为基准(通常选择第一个元素),将待排序序列划分成左右两个子序列,左边的序列小于基准元素,右边的序列大于基准元素,然后分别对左右子序列进行递归排序。
以下是用Java代码实现快速排序的示例:
```java
public class QuickSort {
// 快速排序方法
public static void quickSort(int[] arr, int left, int right) {
if (left < right) {
// 划分序列得到基准的位置
int pivotIndex = partition(arr, left, right);
// 对基准的左半部分进行快速排序
quickSort(arr, left, pivotIndex - 1);
// 对基准的右半部分进行快速排序
quickSort(arr, pivotIndex + 1, right);
}
}
// 划分序列方法,返回基准的位置
public static int partition(int[] arr, int left, int right) {
// 取第一个元素作为基准
int pivot = arr[left];
while (left < right) {
// 从右往左寻找小于基准的元素
while (left < right && arr[right] >= pivot) {
right--;
}
// 将小于基准的元素移到基准的左边
arr[left] = arr[right];
// 从左往右寻找大于基准的元素
while (left < right && arr[left] <= pivot) {
left++;
}
// 将大于基准的元素移到基准的右边
arr[right] = arr[left];
}
// 将基准放置到正确的位置
arr[left] = pivot;
// 返回基准的位置
return left;
}
// 测试快速排序
public static void main(String[] args) {
int[] arr = {6, 3, 8, 2, 9, 1};
quickSort(arr, 0, arr.length - 1);
for (int num : arr) {
System.out.print(num + " ");
}
}
}
```
以上代码实现了快速排序算法,通过调用`quickSort`方法对指定范围内的数组进行排序。在实现过程中,我们使用`partition`方法来划分序列并返回基准的位置。最后,通过在`main`方法中调用`quickSort`方法,可以对提供的测试数组进行排序并输出结果。
### 回答3:
快速排序是一种快速且高效的排序算法,通过不断地选择一个基准元素,将数组分为两个子数组,并递归地对子数组进行排序。
以下是用Java代码实现快速排序的示例:
```java
public class QuickSort {
public static void main(String[] args) {
int[] arr = {10, 7, 8, 9, 1, 5};
int n = arr.length;
quickSort(arr, 0, n-1);
System.out.println("排序后的数组:");
for (int i : arr) {
System.out.print(i + " ");
}
}
public static void quickSort(int[] arr, int low, int high) {
if (low < high) {
int pivotIndex = partition(arr, low, high);
quickSort(arr, low, pivotIndex-1);
quickSort(arr, pivotIndex+1, high);
}
}
public static int partition(int[] arr, int low, int high) {
int pivot = arr[high];
int i = low - 1;
for (int j = low; j < high; j++) {
if (arr[j] < pivot) {
i++;
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
int temp = arr[i+1];
arr[i+1] = arr[high];
arr[high] = temp;
return i+1;
}
}
```
以上代码实现了快速排序算法。首先,定义了一个`quickSort`方法,该方法接受一个整型数组和两个整数参数low和high,其中low表示数组的起始索引,high表示数组的结束索引。在`quickSort`方法中,首先判断low是否小于high,如果是,则以数组的最后一个元素作为基准元素,调用`partition`方法将数组划分为两个子数组,并递归地对子数组进行排序。
`partition`方法用于将数组划分为两个子数组。首先,将数组的最后一个元素作为基准元素,并初始化一个变量i为low-1。然后,从low遍历到high-1的每个元素,如果元素小于基准元素,则将i的值加1,将arr[i]与arr[j]进行交换。最后,将基准元素与arr[i+1]进行交换,并返回i+1作为基准元素的索引。
通过以上代码,可以对一个整型数组进行快速排序,并输出排序后的结果。
阅读全文