algorithm - 以中间元素为轴心的快速排序

标签 algorithm sorting quicksort

我正在尝试搜索有关快速排序如何将中间元素作为枢轴的任何解释,但我找不到任何解释。我想要寻找的是关于如何逐步对数字进行排序的任何演示,因为它真的很难理解算法。谢谢。

最佳答案

垂直条围绕枢轴:

 61 11 93 74 75 21 12|55|81 19 14 86 19 79 23 44
 44 11 23|19|14 21 12 19                        
 19|11|12 14                                    
 11                                             
    19|12|14                                    
    12                                          
      |19|14                                    
       14                                       
          19                                    
             19|21|23 44                        
            |19|21                              
             19                                 
                21                              
                  |23|44                        
                   23                           
                      44                        
                         81 55 75|86|74 79 93 61
                         81 55|75|61 74 79      
                         74|55|61               
                         55                     
                           |74|61               
                            61                  
                               74               
                                  75|81|79      
                                 |75|79         
                                  75            
                                     79         
                                        81      
                                          |93|86
                                           86   
                                              93
 11 12 14 19 19 21 23 44 55 61 74 75 79 81 86 93

基于 Hoare 分区方案的这种变体:

void QuickSort(int a[], int lo, int hi) {
    int i, j, p;
    if (lo >= hi)
        return;
    i = lo - 1;
    j = hi + 1;
    p = a[(lo + hi)/2];
    while (1)
    {
        while (a[++i] < p) ;
        while (a[--j] > p) ;
        if (i >= j)
            break;
        swap(a+i, a+j);
    }
    QuickSort(a, lo, j);
    QuickSort(a, j + 1, hi);
}

请注意,在分割步骤之后,枢轴可以在左侧或右侧结束。

关于algorithm - 以中间元素为轴心的快速排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50723972/

相关文章:

python - 按长度查找匹配组的轨道

java - 快速排序不运行 Java

c# - 按项目模板中的多个项目排序

algorithm - QuickSort分区的循环不变量

php - 为什么 self 实现的快速排序比内部快速排序更快?

c++ - 遍历通用节点类,列出所有节点导致无限循环

algorithm - 查找无向图中两个顶点之间所有简单路径上的所有*顶点*

algorithm - 如何判断 A* 算法何时是一个好的选择,以及如何选择一个好的启发式算法?

java - 如何更改我的代码以每次在新行上打印出来?

c++ - 双向链表冒泡排序,反向方法现已失效