交互设计算法基础(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);
  }
}

 

posted on 2020-04-05 17:20  o0松鼠0o  阅读(162)  评论(0编辑  收藏  举报