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

     1 void quickSort(LineList R[], int first, int end)
     2 {
     3     int i, j;
     4     LineList temp;
     5     i = first;
     6     j = end;
     7     temp = R[i];
     8     R[0] = R[i];
     9 
    10     while (i < j) 
    11     {
    12         while (i < j && R[0].key <= R[i].key) {
    13             j--;
    14         }
    15         if (i < j) {
    16             R[i] = R[j];
    17             i++;
    18         }
    19 
    20         while (i < j && R[0].key >= R[i].key) {
    21             i++;
    22         }
    23         if (i < j) {
    24             R[j] = R[i];
    25             j--;
    26         }
    27 
    28         R[i] = R[0];
    29 
    30         if (first < i - 1) 
    31         {
    32             quickSort(R, first, i - 1);
    33         }
    34         if (i + 1 < end) {
    35             quickSort(R, i + 1, end);
    36         }
    37     }
    38 }

    pivot选取3值平均

     1 ElementType Median3( ElementType A[], int Left, int Right )  
     2 {   
     3     int Center = (Left+Right) / 2;  
     4     if ( A[Left] > A[Center] )  
     5         Swap( &A[Left], &A[Center] );  
     6     if ( A[Left] > A[Right] )  
     7         Swap( &A[Left], &A[Right] );  
     8     if ( A[Center] > A[Right] )  
     9         Swap( &A[Center], &A[Right] );  
    10     /* 此时A[Left] <= A[Center] <= A[Right] */  
    11     Swap( &A[Center], &A[Right-1] ); /* 将基准Pivot藏到右边*/  
    12     /* 只需要考虑A[Left+1] … A[Right-2] */  
    13     return  A[Right-1];  /* 返回基准Pivot */  
    14 }  
    15    
    16 void Qsort( ElementType A[], int Left, int Right )  
    17 { /* 核心递归函数 */   
    18      int Pivot, Cutoff, Low, High;  
    19          
    20      Pivot = Median3( A, Left, Right ); /* 选基准 */   
    21      Low = Left; High = Right-1;  
    22      while (1) { /*将序列中比基准小的移到基准左边,大的移到右边*/  
    23           while ( A[++Low] < Pivot ) ;  
    24           while ( A[--High] > Pivot ) ;  
    25           if ( Low < High ) Swap( &A[Low], &A[High] );  
    26           else break;  
    27      }  
    28      Swap( &A[Low], &A[Right-1] );   /* 将基准换到正确的位置 */   
    29      Qsort( A, Left, Low-1 );    /* 递归解决左边 */   
    30      Qsort( A, Low+1, Right );   /* 递归解决右边 */    
    31 
    32 }  
    33    
    34 void QuickSort( ElementType A[], int N )  
    35 { /* 统一接口 */  
    36      Qsort( A, 0, N-1 );  
    37 }  
    38  
  • 相关阅读:
    Java不带.classpath的svn项目下载,转成到eclipse中
    eclipse 实用快捷键(最全)
    加密算法IV的作用
    Hadoop环境常用命令
    Centos网络配置
    apache指定的网络名不再可用
    Toritoisegit记住用户名密码
    用JavaScript修改CSS属性的代码
    div 旋转
    过滤器、监听器、拦截器的区别
  • 原文地址:https://www.cnblogs.com/abc-begin/p/7642652.html
Copyright © 2011-2022 走看看