zoukankan      html  css  js  c++  java
  • 归并排序(merge sort)算法实现

        归并排序(merge sort)体现了分治的思想,即将一个待排序数组分为两部分,对这两个部分进行归并排序,排序后,再对两个已经排序好的数组进行合并。这种思想可以用递归方式很容易实现。归并排序的时间复杂度为O(nlogn),空间复杂度为O(n)

    实现代码如下:
    #include <stdio.h> 
    #include 
    "common.h"  
    void merge(int data[], int p, int q, int r) 
    {     
        
    int i, j, k, n1, n2;     
        n1 
    = q - p + 1;     
        n2 
    = r - q;     
        
    int L[n1];     
        
    int R[n2];      
        
    for(i = 0, k = p; i < n1; i++, k++)         
            L[i] 
    = data[k];     
        
    for(i = 0, k = q + 1; i < n2; i++, k++)         
            R[i] 
    = data[k];     
        
    for(k = p, i = 0, j = 0; i < n1 && j < n2; k++)     
        {         
            
    if(L[i] > R[j])         
            {             
                data[k] 
    = L[i];             
                i
    ++;         
            }         
            
    else         
            {             
                data[k] 
    = R[j];             
                j
    ++;         
            } 
        }
        
    if(i < n1)     
        {         
            
    for(j = i; j < n1; j++, k++)             
            data[k] 
    = L[j];     
        }     
        
    if(j < n2)     
        {         
            
    for(i = j; i < n2; i++, k++)             
                data[k] 
    = R[i];     
        }  
    }
    void merge_sort(int data[], int p, int r) 
    {     
        
    if(p < r)     
        {         
            
    int q = (p + r) / 2;         
            merge_sort(data, p, q);         
            merge_sort(data, q 
    + 1, r);         
            merge(data, p, q, r);     
        } 


    void test_merge_sort() 
    {   
        
    int data[] = {4412145-123-10121};     
        printf(
    "-------------------------------merge sort----------------------------\n");    
        out_int_array(data, 
    7);     
        merge_sort(data, 
    06);     
        out_int_array(data, 
    7); 


    int main() 
    {    
        test_merge_sort();    
        
    return 0
    }  

  • 相关阅读:
    2017校赛 问题 F: 懒人得多动脑
    2017校赛 C: 不爱学习的小W【模拟】
    方程解的个数【数论】
    小兔蹦蹦跳【脑洞】
    例2-2显示文字
    例2-6 数值转换列表
    例2-3 转换数值
    例2-1 输出文字
    例1-1 求n!
    #文件1向文件中输出字符数据——fgetc
  • 原文地址:https://www.cnblogs.com/nokiaguy/p/1197374.html
Copyright © 2011-2022 走看看