zoukankan      html  css  js  c++  java
  • 基础算法 分治法之合并排序

    思想: 合并排序算法的分治策略是将待排序元素分成大小大致相同的两个子集合,分别对两个子集合进行排序,最终将排好序的子集合合并成所要求的排好序的集合。

     1 #include <stdio.h>  
     2    
     3 void merge(int a[],int p,int q,int r)  
     4 {  
     5     int n1=q-p+1,n2=r-q;  
     6     int b1[n1];  
     7     int b2[n2];  
     8     int i=0,j=0,temp1=p,temp2=q;  
     9     while(p<=q)  
    10     {  
    11         b1[i]=a[p];  
    12         ++i;  
    13         ++p;  
    14     }  
    15     while(q+1<=r)  
    16     {  
    17         b2[j]=a[q+1];  
    18         ++j;  
    19         ++q;  
    20     }  
    21    
    22     p=temp1;q=temp2;  
    23     i=0,j=0;  
    24     while(p<=r)  
    25     {  
    26         if(i==n1)           
    27         {  
    28             a[p]=b2[j];  
    29             ++j;  
    30         }  
    31         else if(j==n2)  
    32         {  
    33             a[p]=b1[i];  
    34             ++i;  
    35         }  
    36        
    37         else if(b1[i]<b2[j])  
    38         {  
    39             a[p]=b1[i];  
    40             ++i;  
    41         }  
    42         else  
    43         {  
    44             a[p]=b2[j];  
    45             ++j;  
    46         }  
    47         ++p;  
    48     }  
    49 }  
    50    
    51 void merge_sort(int a[],int p,int r)  
    52 {  
    53     int q=0;  
    54     if(p<r)  
    55     {  
    56         q=(p+r)/2;  
    57         merge_sort(a,p,q);   
    58         merge_sort(a,q+1,r);  
    59         merge(a,p,q,r);  
    60     }  
    61 }  
    62    
    63 int main()  
    64 {  
    65     int i, a[100];  
    66     srand(time(0));  
    67     for ( i = 1; i < 101; ++i ){  
    68         a[i-1] = rand() % 1001;  
    69         printf( "%3d ", a[i-1] );  
    70         if(i%15==0) printf("
    ");   
    71     }  
    72     printf("
    
    ");  
    73     SelectionSort(a, 100);  
    74     for ( i = 1; i < 101; ++i ){  
    75         printf( "%3d ", a[i-1] );  
    76         if(i%15==0) printf("
    ");   
    77     }  
    78     getch();  
    79     return 0;  
    80 }  
  • 相关阅读:
    01:oracle sql developer配置
    删除eclipse或者MyEclipse的workspace记录
    c++特殊函数
    java类和对象的基础(笔记)
    java打印日历
    10_9 java笔记
    程序流程
    学习疑惑……
    位运算和逻辑运算
    多种类型的指针
  • 原文地址:https://www.cnblogs.com/lt132024/p/6166203.html
Copyright © 2011-2022 走看看