快速排序

上代码,呵呵…

 

隐藏行号 复制代码 Demo
  1. #ifndef __QSORT_H
    
  2. #define __QSORT_H
    
  3. #define CUTOFF (3)
    
  4.  
  5. typedef int ELEMENTSTYPE;
    
  6.  
  7. void QSort(ELEMENTSTYPE A[], int left, int right);
    
  8. void InsertSort(ELEMENTSTYPE A[], int N);
    
  9. #endif
    
<script language="javascript"> function CopyCode(key){var codeElement=null;var trElements=document.all.tags("ol");var i;for(i=0;i  

隐藏行号 复制代码 Demo
  1. #include
          
          
    
          
          
  2. #include"QSort.h"
    
  3.  
  4. void Swap(ELEMENTSTYPE& a, ELEMENTSTYPE &b)
    
  5. {
    
  6.     a ^= b;
    
  7.     b ^= a;
    
  8.     a ^= b;
    
  9. }
    
  10.  
  11. void InsertSort(ELEMENTSTYPE A[], int N)
    
  12. {
    
  13.     ELEMENTSTYPE tmp;
    
  14.     int i = 0, j = 0;
    
  15.     for(i = 1; i < N; ++i)
    
  16.     {
    
  17.         tmp = A[i];
    
  18.         for(j = i; j > 0 && tmp < A[j - 1]; --j)
    
  19.             A[j] = A[j - 1];    
    
  20.         A[j] = tmp;    
    
  21.     }
    
  22. }
    
  23.  
  24. ELEMENTSTYPE median3(ELEMENTSTYPE A[], int left, int right)
    
  25. {
    
  26.     int center = (left + right) >> 1;
    
  27.  
  28.     if(A[left] > A[center])
    
  29.     {
    
  30.         Swap(A[left], A[center]);
    
  31.     }
    
  32.  
  33.     if(A[left] > A[right])
    
  34.     {
    
  35.         Swap(A[left], A[right]);
    
  36.     }
    
  37.  
  38.     if(A[center] > A[right])
    
  39.     {
    
  40.         Swap(A[center], A[right]);
    
  41.     }
    
  42.     
    
  43.     Swap(A[center], A[right - 1]);
    
  44.     
    
  45.     return A[right - 1];
    
  46. }
    
  47.  
  48. void QSort(ELEMENTSTYPE A[], int left, int right)
    
  49. {
    
  50.     if(left + CUTOFF <= right)
    
  51.     {
    
  52.         int i = left, j = right - 1;
    
  53.         ELEMENTSTYPE tmp = median3(A, left, right);    
    
  54.         
    
  55.         for(;;)
    
  56.         {
    
  57.             while(A[++i] < tmp);
    
  58.             while(A[--j] > tmp);    
    
  59.  
  60.             if(i > j)
    
  61.                 break;
    
  62.  
  63.             Swap(A[i], A[j]);
    
  64.         }
    
  65.         
    
  66.         Swap(A[i], A[right - 1]);
    
  67.  
  68.         QSort(A, left, i - 1);
    
  69.         QSort(A, i + 1, right);
    
  70.     }
    
  71.     else
    
  72.     {
    
  73.         InsertSort(A + left, right - left + 1);
    
  74.     }
    
  75. }
    
  76.  
  77.  
  78.  
  79.  
<script language="javascript"> function CopyCode(key){var codeElement=null;var trElements=document.all.tags("ol");var i;for(i=0;i 又该被那些从不在blog贴代码的人BS了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值