21xrx.com
2024-05-09 17:55:17 Thursday
登录
文章检索 我的文章 写文章
C++快速排序程序
2023-07-12 06:26:05 深夜i     --     --
C++ 快速排序 程序 排序算法 数据结构

快速排序是一种常见的排序算法,其在C++中的实现非常简单。这篇文章将介绍如何编写一个快速排序程序,并讨论其基本原理及其优缺点。

快速排序的基本原理是分治法:将数组分成两个子数组,其中一个子数组的所有元素都比另一个子数组的所有元素小,然后递归地对两个子数组进行排序。在递归过程中,我们将选择一个元素,并重新安排数组,使得该元素左侧的所有元素都比它小,右侧的所有元素都比它大。

为了实现快速排序,我们需要考虑两个基本问题:如何选取一个元素以分割数组,以及如何重新安排数组。在大多数实现中,我们将选择数组的最后一个元素作为分割元素。然后,我们将所有小于分割元素的元素移动到数组的左侧,所有大于分割元素的元素移动到数组的右侧。最后,我们递归地对这个分割元素左侧和右侧的子数组进行排序。

下面是使用C++实现快速排序的示例代码:


void quicksort(int arr[], int low, int high) {

  if (low >= high)

    return;

  

  int pivot = arr[high];

  int i = low;

  for (int j = low; j < high; j++) {

    if (arr[j] <= pivot) {

      swap(arr[i], arr[j]);

      i++;

    }

  }

  swap(arr[i], arr[high]);

  quicksort(arr, low, i - 1);

  quicksort(arr, i + 1, high);

}

在这个实现中,我们定义了一个递归函数`quicksort`,该函数接受三个参数:数组`arr`,数组的起始索引`low`,以及数组的结束索引`high`。如果`low>=high`,就意味着数组已经排序好了,所以我们不需要继续操作。

在其他情况下,我们选择分割元素为组中的最后一个元素,然后定义一个指针`i`,并将其初值赋为`low`。我们通过循环遍历数组中除最后一个元素外的所有元素,如果元素arr [j]小于或等于分割元素,则将其移动到左侧,并将指针i增加1。最后,我们将分割元素从最后的位置移动到指针`i`当前所指向的位置。

最后,我们递归地对分割元素左侧和右侧的子数组进行排序。这个实现可以在O(n log n)的时间复杂度内排序n个元素,但它可能会在最坏情况下达到O(n ^ 2)的时间复杂度。

总的来说,快速排序是一种快速而简单的排序算法,可以轻松应对各种排序场景。通过理解快速排序程序的基本原理和实现,您可以轻松编写快速且高效的快速排序程序。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复