java实现快速排序代码
时间: 2023-09-09 19:05:19 浏览: 227
Java编写的快速排序代码.rar
### 回答1:
Java实现的快速排序代码可以用以下方法:
// 快速排序代码
public static void quickSort(int[] arr, int startIndex, int endIndex) {
// 递归结束条件:startIndex大等于endIndex的时候
if (startIndex >= endIndex) {
return;
}
// 得到基准元素位置
int pivotIndex = partition(arr, startIndex, endIndex);
// 根据基准元素,分成两部分进行递归排序
quickSort(arr, startIndex, pivotIndex - 1);
quickSort(arr, pivotIndex + 1, endIndex);
}// 分治(双边循环法)
private static int partition(int[] arr, int startIndex, int endIndex) {
// 取第一个位置的元素作为基准元素
int pivot = arr[startIndex];
int left = startIndex;
int right = endIndex;
while (left != right) {
//控制right指针比较并左移
while (left < right && arr[right] > pivot) {
right--;
}
//控制left指针比较并右移
while (left < right && arr[left] <= pivot) {
left++;
}
//交换left和right指针所指向的元素
if (left < right) {
int p = arr[left];
arr[left] = arr[right];
arr[right] = p;
}
}
//pivot和指针重合点交换
int p = arr[left];
arr[left] = arr[startIndex];
arr[startIndex] = p;
return left;
}
### 回答2:
快速排序(QuickSort)是一种常用的排序算法,它采用分治法(Divide and Conquer)思想来对一个序列进行排序。其基本思想是,在待排序的序列中选择一个基准元素(通常为第一个元素),通过一趟排序将序列分成两个子序列,其中左子序列的元素都小于基准元素,右子序列的元素都大于基准元素,然后分别对左右子序列递归地进行快速排序。
下面是使用Java语言实现快速排序的代码实例:
```java
public class QuickSort {
public void quickSort(int[] arr, int low, int high) {
if (low < high) {
int pivot = partition(arr, low, high); // 将数组划分成两部分,并返回基准元素的索引
quickSort(arr, low, pivot - 1); // 对左子序列进行快速排序
quickSort(arr, pivot + 1, high); // 对右子序列进行快速排序
}
}
public int partition(int[] arr, int low, int high) {
int pivot = arr[low]; // 将第一个元素设为基准元素
while (low < high) {
while (low < high && arr[high] >= pivot) {
high--;
}
arr[low] = arr[high]; // 将比基准元素小的移到左边
while (low < high && arr[low] <= pivot) {
low++;
}
arr[high] = arr[low]; // 将比基准元素大的移到右边
}
arr[low] = pivot; // 将基准元素放到最终位置
return low; // 返回基准元素的索引
}
public static void main(String[] args) {
int[] arr = {6, 2, 8, 3, 1, 9, 7, 5, 4};
QuickSort quickSort = new QuickSort();
quickSort.quickSort(arr, 0, arr.length - 1);
for (int i : arr) {
System.out.print(i + " ");
}
}
}
```
以上是一个简单的快速排序的实现,通过递归的方式对左右子序列进行快速排序并逐步合并,最终得到一个有序的序列。
### 回答3:
快速排序是一种基于分治策略的排序算法,其基本思想是通过划分将待排序序列分成较小和较大的两个子序列,然后对子序列进行递归排序,最后将子序列合并起来,实现整个序列的排序。
以下是使用Java语言实现快速排序的代码:
```java
public class QuickSort {
public static void main(String[] args) {
int[] arr = {5, 2, 8, 9, 1};
quickSort(arr, 0, arr.length - 1);
System.out.println("排序后的数组:");
for (int num : arr) {
System.out.print(num + " ");
}
}
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[low]; // 选取基准元素
while (low < high) {
while (low < high && arr[high] >= pivot) {
high--;
}
arr[low] = arr[high]; // 比基准小的元素移到低端
while (low < high && arr[low] <= pivot) {
low++;
}
arr[high] = arr[low]; // 比基准大的元素移到高端
}
arr[low] = pivot; // 将基准元素放到最终位置
return low; // 返回基准元素的索引
}
}
```
以上的代码实现了快速排序算法,利用分治策略将待排序数组拆分为较小和较大的子数组,并通过递归的方式对子数组进行排序,最后再将子数组合并起来得到有序的数组。在代码中,通过使用`partition`方法选择基准元素并进行划分,然后用`quickSort`方法对划分得到的子数组进行递归排序。最终,通过在`main`方法中调用`quickSort`方法实现对给定数组的排序,并打印排序后的结果。
快速排序的时间复杂度为O(n log n),其中n为待排序数组的长度。
阅读全文