zoukankan      html  css  js  c++  java
  • 交互设计算法基础(10)- Quick Sort

      基本思想:快速排序算法的基本思想为分治思想。
      1)先从数列中取出一个数作为基准数;
      2)根据基准数将数列进行分区,小于基准数的放左边,大于基准数的放右边;
      3)重复分区操作,知道各区间只有一个数为止。

      算法流程:(递归+挖坑填数)
      1)i=L,j=R,将基准数挖出形成第一个坑a[i];
      2)j--由后向前找出比它小的数,找到后挖出此数a[j]填到前一个坑a[i]中;
      3)i++从前向后找出比它大的数,找到后也挖出此数填到前一个坑a[j]中;
      4)再重复2,3),直到i=j,将基准数填到a[i]。

      时间复杂度:O(nlog(n)),但若初始数列基本有序时,快排序反而退化为冒泡排序。

    void QuickSort(int a[], int L, int R) {
      if (L<R) {
        int i=L, j=R, temp=a[i];
        while (i<j) {
          //从右向左找小于基准值a[i]的元素
          while (i<j && a[j]>=temp)
            j--;
          if (i<j)
            a[i++]=a[j];
          //从左向右找大于基准值a[i]的元素
          while (i<j && a[i]<temp)
            i++;
          if (i<j)
            a[j--]=a[i];
        }
        //将基准值填入最后的坑中
        a[i]=temp;
        //递归调用,分治法的思想
        QuickSort(a, L, i-1);
        QuickSort(a, i+1, R);
      }
    }
  • 相关阅读:
    nfc相关
    MI卡UID
    VC黑客编程实战视频-破解网吧电影下载
    在WebLogic服务器下 使用Apache Web 服务插件
    C++11FAQ 中文版带完整书签141页PDF
    nginx manager
    JAVA插入数据到MySql少了8小时
    Linux 学习记录
    mssql 用户只能查看授权的数据库
    Mac配置JAVA_HOME
  • 原文地址:https://www.cnblogs.com/x5115x/p/12638070.html
Copyright © 2011-2022 走看看