快速排序(QuickSort)是一种高效的排序算法,采用分治法(Divide and Conquer)策略来把一个序列分为较小和较大的两个子序列,然后递归地排序两个子序列。以下是Java实现快速排序的代码示例:

 public class QuickSort {
 
  
 
     // 主方法,用于测试
 
     public static void main(String[] args) {
 
         int[] array = {10, 7, 8, 9, 1, 5};
 
         int n = array.length;
 
  
 
         QuickSort ob = new QuickSort();
 
         ob.sort(array, 0, n-1);
 
  
 
         System.out.println("Sorted array:");
 
         printArray(array);
 
     }
 
  
 
     // 快速排序算法的实现
 
     void sort(int[] array, int low, int high) {
 
         if (low < high) {
 
             // pi 是分区索引,array[pi] 已经在正确的位置
 
             int pi = partition(array, low, high);
 
  
 
             // 分别对左右子数组进行排序
 
             sort(array, low, pi - 1);
 
             sort(array, pi + 1, high);
 
         }
 
     }
 
  
 
     // 分区操作,选择最后一个元素作为基准
 
     int partition(int[] array, int low, int high) {
 
         int pivot = array[high];  // 选择最右边的元素作为基准
 
         int i = (low - 1);  // i 是较小元素的索引
 
  
 
         for (int j = low; j <= high - 1; j++) {
 
             // 如果当前元素小于或等于基准
 
             if (array[j] <= pivot) {
 
                 i++;
 
  
 
                 // 交换 array[i] 和 array[j]
 
                 int temp = array[i];
 
                 array[i] = array[j];
 
                 array[j] = temp;
 
             }
 
         }
 
  
 
         // 交换 array[i + 1] 和 array[high] (或基准)
 
         int temp = array[i + 1];
 
         array[i + 1] = array[high];
 
         array[high] = temp;
 
  
 
         return i + 1;
 
     }
 
  
 
     // 打印数组的方法
 
     static void printArray(int[] array) {
 
         int n = array.length;
 
         for (int i = 0; i < n; ++i)
 
             System.out.print(array[i] + " ");
 
         System.out.println();
 
     }
 
 }

代码说明:

  1. 主方法 (main):
  • 创建一个包含若干整数的数组。
  • 调用 QuickSort 类的 sort 方法进行排序。
  • 调用 printArray 方法打印排序后的数组。
  1. sort 方法:
  • 递归地对数组进行排序。
  • 如果 low 小于 high,则找到分区索引 pi,然后分别对左右子数组进行排序。
  1. partition 方法:
  • 选择数组的最后一个元素作为基准(pivot)。
  • 遍历数组,将小于或等于基准的元素移动到左边。
  • 最后,将基准元素放到正确的位置(即 i + 1 处),并返回该位置索引。
  1. printArray 方法:
  • 打印数组中的元素。

注意事项:

  • 快速排序的最坏时间复杂度为 O(n^2),但在平均情况下时间复杂度为 O(n log n)。
  • 可以选择不同的基准元素(如第一个元素、最后一个元素、中间元素或随机元素)来优化算法的性能。
  • 快速排序是就地排序(in-place sort),不需要额外的存储空间。

这个代码示例展示了基本的快速排序实现,适用于大多数情况下的排序需求。