zoukankan      html  css  js  c++  java
  • 快速排序

    在待排序表中任取一个元素pivot作为基准,通过一趟排序将待排序表分为独立的两个部分,左半边小于pivot,右半边大于或者等于pivot,则pivot放在了其最终的位置L(k)上,这个过程称为一趟快速排序。而后分别对两个子表重复上述过程,直到每个部分内只有一个元素或者为空为止,即所有的元素都放在了其最终的位置。

    在选择pivot时,一般假设每次总是以当前表中的第一个元素作为枢轴值对表进行划分,则必须将表中比枢轴值大的元素向右移动,比其小的向左移动。

    1. int Partition(ElemType A[], int low, int high)
    2. {
    3. ElemType pivot = A[low];//将当前表中的第一个元素设为枢纽值,对表进行划分
    4. while(low < high)//循环跳出的条件
    5. {
    6. while(low<high && A[high]>=pivot)
    7. --high;
    8. A[low]=A[high];//将比枢纽值小的元素移动到左端
    9. while(low<high && A[low]<=pivot)
    10. ++low
    11. A[high]=A[low];//将比枢纽值大的元素移动到右端
    12. }
    13. A[low]=pivot;//枢纽元素存放到最终的位置
    14. return low;//返回存放枢纽值的最终位置
    15. }
    16. void QuickSort(ElemType A[], int low ,int high)
    17. {
    18. if(low<high)
    19. {
    20. int pivotPos=Partition(A, low, high);
    21. QuickSort(A, low, pivotPos-1);
    22. QuickSort(A, pivotPos+1, high);
    23. }
    24. }
    快速排序构成一个递归树,递归深度即为树的高度。当枢纽值每次都将子表等分时,此时递归树的高为log2n(2为底数),当枢纽值,每次都是子表的最大值或者最小值时,此时递归树退化为单链表,树高为n;





  • 相关阅读:
    Mysql安装
    Python的内存管理机制
    Ansible模块
    Redis持久化
    Linux——ansible(1)
    Flask
    Flask入门
    ajax处理回调函数,用ajax向后台发送数据
    数字类型钱币转换为大写
    ligerui多选动态下拉框
  • 原文地址:https://www.cnblogs.com/zhuzhenfeng/p/5aab20261984d0a50277163141d740c9.html
Copyright © 2011-2022 走看看