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);
      }
    }
  • 相关阅读:
    2016年10月30日表单标签与样式表分类和选择器
    2016年10月29日常用标签与表格
    2016年10月28日网页属性和通用标签
    10月27日体会目标
    字符串学习笔记
    [51nod1789] 跑得比谁都快
    [洛谷9月月赛]签到题
    [LUOGU2730] 魔板
    [SCOI2009]迷路
    [51nod1074] 约瑟夫问题 V2
  • 原文地址:https://www.cnblogs.com/x5115x/p/12638070.html
Copyright © 2011-2022 走看看