快速排序(CPP)

本文提供了一个使用C++实现的快速排序算法示例。通过递归地将数组分为较小和较大的部分,并对这些部分进行排序,该算法有效地实现了对整数数组的排序。示例代码展示了如何定义分区函数以及快速排序函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<iostream>
#include<string>


using namespace std;


int partion(int a[],int left,int right)
{
    int privot;
    privot =a[left];
   while(left<right)
   {


      while((left<right) && ( privot<=a[right]))
      {
         right --  ;
      }
      a[left]=a[right];
      while( (left<right) && ( privot>=a[left]))
      {
         left ++;
      }
      a[right]=a[left];
   }
        a[left]=privot;


      return  left;
}


void quickSort(int a[],int p,int r)
{
    int q;
    if(p<r){
     q=partion(a,p,r);
     quickSort(a,p,q-1);
     quickSort(a,q+1,r);
    }
}


int main()
{
    int a[8]={5,2,7,9,0,2,4,1};
    quickSort(a,0,7);
    for(int i=0;i<8;i++)
      cout<<a[i]<<"  ";
    cout<<endl;










}

转载于:https://my.oschina.net/liangxiao/blog/121554

### 快速排序的基本思想 快速排序是一种基于分治法的高效排序算法,其核心思想是选择一个基准元素,将数组划分为两部分,其中一部分的所有元素都小于等于基准元素,另一部分的所有元素都大于等于基准元素。然后对这两部分分别进行递归排序,最终实现整个数组的有序化[^2]。 ### 快速排序的实现步骤 1. **选择基准元素**:通常选择数组中的第一个元素作为基准。 2. **分区操作**:将数组划分为两部分,使得左边的元素小于等于基准,右边的元素大于等于基准。 3. **递归排序**:对左右两部分分别进行快速排序。 ### 快速排序的C++实现代码 以下是一个完整的C++实现示例,用于对数组进行从小到大排序: ```cpp #include <iostream> #include <vector> using namespace std; // 分区函数,返回基准元素的最终位置 int partition(vector<int>& arr, int left, int right) { int base = arr[left]; // 选择最左边的数为基准 int i = left, j = right; while (i < j) { // 从右向左找第一个小于base的元素 while (arr[j] >= base && i < j) { j--; } // 从左向右找第一个大于base的元素 while (arr[i] <= base && i < j) { i++; } // 交换这两个元素 if (i < j) { swap(arr[i], arr[j]); } } // 将基准元素放到正确的位置 swap(arr[left], arr[i]); return i; } // 快速排序函数 void quickSort(vector<int>& arr, int left, int right) { if (left >= right) { return; } // 分区操作 int pivotIndex = partition(arr, left, right); // 对左半部分递归排序 quickSort(arr, left, pivotIndex - 1); // 对右半部分递归排序 quickSort(arr, pivotIndex + 1, right); } // 主函数测试 int main() { vector<int> arr = {3, 1, 4, 2}; cout << "排序前: "; for (int num : arr) { cout << num << " "; } cout << endl; quickSort(arr, 0, arr.size() - 1); cout << "排序后: "; for (int num : arr) { cout << num << " "; } cout << endl; return 0; } ``` ### 代码说明 - **partition函数**:该函数负责将数组划分为两部分,并返回基准元素的最终位置。基准元素初始选择为数组的最左边元素,通过双指针 `i` 和 `j` 的移动,将数组中的元素进行调整。 - **quickSort函数**:这是递归函数,负责对数组的左右两部分分别进行快速排序。 - **主函数**:测试代码部分,对一个数组进行排序并输出结果。 ### 复杂度分析 - **时间复杂度**:快速排序的平均时间复杂度为 $ O(n \log n) $,最坏情况下为 $ O(n^2) $(当数组已经有序时)。 - **空间复杂度**:快速排序的空间复杂度为 $ O(\log n) $,主要来自于递归调用栈。 ### 适用场景 快速排序适用于以下场景: - 需要对大规模数据进行排序。 - 数据分布较为随机,不适用于已经有序或几乎有序的数据集。 - 在内存中对数组进行原地排序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值