java的快速排序怎么写?
时间: 2023-09-11 21:05:17 浏览: 36
### 回答1:
答案:Java的快速排序可以通过以下代码实现: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;
} void quickSort(int arr[], int low, int high)
{
if (low < high)
{
int pi = partition(arr, low, high);
quickSort(arr, low, pi-1);
quickSort(arr, pi+1, high);
}
} // 驱动程序
int main()
{
int arr[] = {10, 7, 8, 9, 1, 5};
int n = sizeof(arr)/sizeof(arr[0]);
quickSort(arr, 0, n-1);
cout << "排序后的结果是 : \n";
printArray(arr, n);
return 0;
}
### 回答2:
快速排序是一种常用的排序算法,其基本思想是通过一趟排序将待排序的数据分割成独立的两部分,其中一部分的所有元素小于另一部分的所有元素,然后再对这两部分分别进行快速排序,以达到整个序列有序的目的。
具体实现快速排序的算法如下:
1. 首先选择一个基准元素(可以是数组第一个元素)。
2. 接下来需要将数组中小于基准元素的元素移到基准元素的左边,大于基准元素的元素移到基准元素的右边。可以使用双指针的方式进行操作,即左指针从数组的左侧开始移动,右指针从数组的右侧开始移动,当左指针找到一个大于基准元素的元素,右指针找到一个小于基准元素的元素时,交换两个元素的位置。重复这个过程,直到左指针和右指针相遇。
3. 当左指针和右指针相遇时,将基准元素与相遇位置的元素交换位置,此时基准元素的位置就确定了。
4. 将整个序列以基准元素的位置为中心分成两部分,分别对左半部分和右半部分进行递归调用快速排序。
5. 递归结束的条件是序列只包含一个元素或者没有元素。
6. 最后,所有的递归调用结束后,原始序列就被排序。
以下是使用Java语言实现快速排序的代码示例:
```java
public class QuickSort {
public static void quickSort(int[] array, int left, int right) {
if (left >= right) {
return;
}
int pivot = partition(array, left, right);
quickSort(array, left, pivot - 1);
quickSort(array, pivot + 1, right);
}
private static int partition(int[] array, int left, int right) {
int pivot = array[left];
while (left < right) {
while (left < right && array[right] >= pivot) {
right--;
}
array[left] = array[right];
while (left < right && array[left] <= pivot) {
left++;
}
array[right] = array[left];
}
array[left] = pivot;
return left;
}
}
```
以上就是使用Java语言实现快速排序的方法。通过调用`quickSort`方法,可以对整个数组进行快速排序。
### 回答3:
Java的快速排序是一种常用的排序算法,它基于分治的思想,通过分割数组为更小的子数组,并对子数组进行排序来实现整个数组的排序。以下是Java实现快速排序的一种常见方法:
```java
public class QuickSort {
public static void main(String[] args) {
int[] array = {5, 3, 8, 9, 1, 7, 6, 2, 4};
quickSort(array, 0, array.length - 1);
System.out.println("排序结果:" + Arrays.toString(array));
}
public static void quickSort(int[] array, int left, int right) {
if (left < right) {
int pivotIndex = partition(array, left, right);
quickSort(array, left, pivotIndex - 1);
quickSort(array, pivotIndex + 1, right);
}
}
public static int partition(int[] array, int left, int right) {
int pivot = array[right]; // 选择最右边的元素作为基准值
int i = left - 1; // i表示小于基准值的元素的最右位置
for (int j = left; j < right; j++) {
if (array[j] < pivot) {
i++;
swap(array, i, j);
}
}
swap(array, i + 1, right); // 将基准值放到正确的位置
return i + 1;
}
public static void swap(int[] array, int i, int j) {
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
```
以上代码首先定义了一个`quickSort`方法来实现快速排序的逻辑。在`quickSort`方法中,如果`left`小于`right`,则选择一个基准值,并通过`partition`方法将数组分成小于基准值和大于基准值的两部分,并递归调用`quickSort`方法对两部分分别进行排序。
`partition`方法选择右边的元素作为基准值,使用一个变量`i`表示小于基准值的元素的最右位置,并通过遍历数组,将小于基准值的元素与`i`位置上的元素进行交换,然后将基准值放到正确的位置上,并返回该位置。
最后,在`main`方法中,定义一个测试数组,调用`quickSort`方法进行排序,然后输出排序结果。
通过以上这种实现方式,可以很好地实现对数组的快速排序。