zoukankan      html  css  js  c++  java
  • 各种排序总结(五)快速排序

     1 /*********************
     2 快排思想:
     3 1.i =L; j = R; 选取第一个数为基准数,将基准数挖出形成第一个坑a[0]。
     4 2. j—从后向前找到比基准数小的,找到后将此数挖出填入前一个坑中a[i],形成新的坑a[j]
     5 3. i++从前向后找到比基准数大的,找到后将此数挖出填入前一个坑中a[j]
     6 4. 重复执行2、3步直到i==j,将基准数填入即可
     7 ***********************/
     8 #include <iostream>
     9 
    10 using namespace std;
    11 
    12 int Partition(int * arr, int l, int r)
    13 {
    14     int pivot = arr[l];
    15     while(l < r)
    16     {
    17         while((arr[r] > pivot) && (l < r))
    18             r--;
    19         if(l < r)
    20         {
    21             arr[l] = arr[r];
    22             l++;
    23         }
    24         while((arr[l] < pivot) && (l < r))
    25             l++;
    26         if(l < r)
    27         {
    28             arr[r] = arr[l];
    29             r--;
    30         }
    31     }
    32     arr[l] = pivot;
    33     return l;
    34 }
    35 
    36 void QuickSort(int* arr, int l, int r)
    37 {
    38     if(l >= r) return;
    39     else
    40     {
    41         int pivot_index = Partition(arr,l,r);
    42         QuickSort(arr,l,pivot_index-1);
    43         QuickSort(arr,pivot_index+1,r);
    44     }
    45 }
    46 
    47 
    48 int main()
    49 {
    50     int * arr;
    51     int n;
    52     cout<<"Input the arr length:"<<endl;
    53     cin>>n;
    54     arr = new int[n];
    55     cout<<"Input the arr elements:"<<endl;
    56     for(int i=0;i<n;i++)
    57     {
    58         cin>>arr[i];
    59     }
    60     QuickSort(arr,0,n-1);
    61     cout<<"The outcome:"<<endl;
    62     for(int i=0;i<n;i++)
    63         cout<<arr[i]<<endl;
    64     return 0;
    65 }
    66 
    67 /************
    68 不稳定
    69 比较次数比移动次数多很多。
    70 最差情况:待排序关键字已有序时
    71           每次分割都将记录全部分到一个子序列中,而另一个子序列为空。
    72           这种情况相当于二叉树每个结点只有左结点(或一直只有右结点)。
    73           时间复杂度为O(n^2)。
    74 最好情况:待排序关键字随机分布时
    75           每次分割都很平均,恰好记录分成两个长度相等的子序列。
    76           这种情况相当于平衡二叉树。
    77           时间复杂度O(nlogn)。
    78 平均情况:轴值将数组分成长度为0和n-1,或者1和n-2,或者...等各种情况是等概率的。
    79           时间复杂度为O(nlogn)。
    80 最差空间代价:O(n)
    81 平均空间代价:O(logn)
    82 综上:当待排序元素随机分布时,快排时间最短。
    83 **************/
  • 相关阅读:
    Matplotlib
    Numpy&Pandas
    莫凡《机器学习》笔记
    李宏毅《1天搞懂深度学习》笔记
    Git客户端使用教程
    像素级压缩感知图像融合的论文
    二分图【洛谷P2175】 小Z的游戏分队
    模板【洛谷P3390】 【模板】矩阵快速幂
    模板 可并堆【洛谷P3377】 【模板】左偏树(可并堆)
    LCA SP913 QTREE2
  • 原文地址:https://www.cnblogs.com/CnZyy/p/3314702.html
Copyright © 2011-2022 走看看