快速排序

快速排序是一种由C.A.R. Hoare在1962年提出的原址排序算法,具有平均时间复杂度为O(nlogn)的特点。该算法通过一趟排序将数据分割成两部分,并递归地对这两部分进行排序,最终实现整个序列的有序。本文介绍了快速排序的基本思想、交换方式以及实现代码。
摘要由CSDN通过智能技术生成

快速排序(Quicksort)是对冒泡排序的一种改进。

快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列

快速排序是一种原址排序算法,且不稳定。时间O(nlogn)

  1. #include <iostream>
  2. using namespace std;
  3. int Position(int A[], int low, int hight)//跟主元交换
  4. {
  5.     int i = low, j = hight, privot = A[low];
  6.     while (i < j)
  7.     {
  8.         while (i<j&&privot<A[j])
  9.         {
  10.             j--;
  11.         }
  12.         if (i < j)
  13.         {
  14.             swap(A[i++], A[j]);
  15.         }
  16.         while (i<j&&privot>=A[i])
  17.         {
  18.             i++;
  19.         }
  20.         if (i < j)
  21.         {
  22.             swap(A[i], A[j--]);
  23.         }
  24.     }
  25.     return i;
  26. }
  27. int Position1(int A[], int low, int hight)//不跟主元交换
  28. {
  29.     int i = low, j = hight, p = A[low];
  30.     while (i < j)
  31.     {
  32.         while (i<j&&p<A[j])
  33.         {
  34.             j--;
  35.         }
  36.         while (i < j&&p >= A[i])i++;
  37.         if (i < j)
  38.         {
  39.             swap(A[i], A[j]);
  40.             i++, j--;
  41.         }
  42.     }
  43.     if (A[i] > p)
  44.     {
  45.         swap(A[i - 1], A[low]);
  46.         return i - 1;
  47.     }
  48.     else
  49.     {
  50.         swap(A[i], A[low]);
  51.         return i;
  52.     }
  53. }
  54. void QuietSort(int A[], int low, int hight)
  55. {
  56.     int mid;
  57.     if (low < hight)
  58.     {
  59.         //mid = Position(A, low, hight);
  60.         mid = Position1(A, low, hight);
  61.         QuietSort(A, low, mid-1);
  62.         QuietSort(A, mid + 1, hight);
  63.     }
  64. }
  65. int main()
  66. {
  67.     int i, n, A[20];
  68.     cin >> n;
  69.     for (i = 0; i < n; i++)
  70.     {
  71.         cin >> A[i];
  72.     }
  73.     QuietSort(A, 0, n - 1);
  74.     for (i = 0; i < n; i++)
  75.     {
  76.         cout << A[i] << " ";
  77.     }
  78.     return 0;
  79. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值