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

    快速排序主要使用分治法的思想,步骤为:

    1、从数列中挑出一个元素作为基准。

    2、重新排列所有元素,所有比基准小的元素放在基准之前,比基准大的元素放在基准之后(等于基准的元素可以放在任意一边)。操纵结束后基准元素所在的位置就是排序后它应该在的位置。

    3、递归地对基准左边的子数列和基准右边的子数列分别进行第1、2步操作,直至子数列的元素个数为1。

    时间复杂度:O(n * logn)

    稳定性: 不稳定 (相等的元素在partition过程中可能会改变相对位置, 比如说我们选取的key)

    最坏情况: 数列已排序或逆序, 此时需要时间复杂度O(n^2),可以采用随机化算法选取基准元素。

    实现:

       1: int partition(int a[], int l, int r)
       2: {
       3:     int key = a[l];
       4:     int i = l, j = r;
       5:  
       6:     while (i < j) {
       7:         while (i < j && a[i] < key)
       8:             ++i;
       9:         while (i < j && a[j] > key)
      10:             --j;
      11:         if (i >= j)
      12:             break;
      13:         swap(a[i], a[j]);
      14:     }
      15:     swap(a[i], a[l]);
      16:  
      17:     return i;
      18: }
      19:  
      20: void
      21: quick_sort(int a[], int l, int r)
      22: {
      23:     int p;
      24:     
      25:     if (l < r) {
      26:         p = partition(a, l, r);
      27:         
      28:         quick_sort(a, l, p-1);
      29:         quick_sort(a, p+1, r);
      30:     }    
      31: }
  • 相关阅读:
    最终一致性解决实例
    分布式事务一致性方案
    分布式事务
    OSX
    JAVA
    Eclipse
    Activiti
    CentOS
    用Visual Studio 2015 编写 MASM 汇编程序(二)从头开发一个Win32汇编程序
    Oracle
  • 原文地址:https://www.cnblogs.com/newth/p/2529466.html
Copyright © 2011-2022 走看看