zoukankan      html  css  js  c++  java
  • 在归并排序中对小数组采用插入排序

     1 #include<stdio.h>
     2 void insertsort(int *A,int p,int r){
     3     //插入排序
     4     int i,j,k;
     5     for(i=p;i<=r;i++){
     6         j=A[i];k=i;
     7         while(k>p&&j<A[k-1]){
     8             A[k]=A[k-1];
     9             k--;
    10         }
    11         A[k]=j;
    12     }
    13 //    for(i=p;i<=r;i++){    
    14 //        printf("%d	",A[i]);
    15 //    }
    16 //    printf("
    ");
    17 }
    18 void MERGE(int *A,int p,int q,int r){
    19     //单步归并排序
    20     int i,j,k;
    21     int *B=malloc((r-p+1)*sizeof(int));
    22     i=p;j=q+1;k=0;
    23     while(i<=q&&j<=r){
    24         if(A[i]<A[j]){
    25             B[k]=A[i];
    26             i++;
    27         }
    28         else{
    29             B[k]=A[j];
    30             j++;
    31         }
    32         k++;
    33     }
    34     while(i<=q){B[k]=A[i];i++;k++;}
    35     while(j<=r){B[k]=A[j];j++;k++;}
    36     for(i=p,k=0;i<=r;i++,k++){
    37         A[i]=B[k];
    38 //        printf("%d	",A[i]);
    39     }
    40 //    printf("
    ");
    41 }
    42 void MERGE_InsertSORTUP(int *A,int p,int r,int k){
    43     //杂交体:插入归并排序,
    44     int q;
    45     if(p<r){
    46         q=(p+r)/2;
    47         if((q-p+1)<=k)        //当子数组长度≤k的时候就不再进行划分,而是对该子数组进行插入排序
    48             insertsort(A,p,q);
    49         else
    50             MERGE_InsertSORTUP(A,p,q,k);
    51         if((r-q)<=k)
    52             insertsort(A,q+1,r);
    53         else
    54             MERGE_InsertSORTUP(A,q+1,r,k);
    55 
    56             MERGE(A,p,q,r);
    57     }
    58 }
    59 void main(){
    60     int i,k;
    61     int length=100;
    62     int *B=malloc(length*sizeof(int));
    63     for(i=0;i<length;i++){
    64         B[i]=rand()%100;        //随机生成数组
    65         printf("%6d",B[i]);
    66         if((i+1)%10==0)printf("
    ");
    67     }
    68     printf("
    
    --------------------------我是分割线------------------------
    
    ");
    69     k=5;                         //设置子数组长度为5
    70     MERGE_InsertSORTUP(B,0,length-1,k);
    71     for(i=0;i<length;i++){
    72         printf("%6d",B[i]);
    73         if((i+1)%10==0)printf("
    ");
    74     }
    75 }


    结果:
    
    
  • 相关阅读:
    集群临时重启
    elasticsearch索引目录设置
    elasticsearch索引路径规则
    spring boot 使用application.properties 进行外部配置
    ELASTICSEARCH健康red的解决
    Elasticsearch——使用_cat查看Elasticsearch状态
    vmstat命令
    ava Maven项目之Nexus私服搭建和版本管理应用
    android 2.2 videoView 诡异bug
    华为部分设备运行很卡的问题
  • 原文地址:https://www.cnblogs.com/zzsf/p/3823562.html
Copyright © 2011-2022 走看看