zoukankan      html  css  js  c++  java
  • C 归并算法

    概念:把数组分割成两个相同大小的子数组,对两个数组进行排序,然后再将他们合并成一个数组。对于有奇数个元素的数组,这个算法创建两个子数组,其中一个要比另一个多一个元素。

    #include "stdio.h"
    #include "stdlib.h"
    #include "time.h"
    
    #define SIZE 10
    
    void mergeSort(int arr[],int low,int high);
    void merge(int arr[],int low,int high,int low2,int high2);
    
    int main(void)
    {
        int loop,temp;
        int arr[SIZE];
        srand(time(NULL));
        
        printf("The Arrary before merge sort:
    ");
        for(loop = 0; loop < SIZE; loop++){
            temp = rand()%99 + 1;
            printf("%d ",temp);
            arr[loop]  = temp;
        }
    
        mergeSort(arr,0,SIZE-1);
    
        printf("
    The array after merge sort:
    ");
    
        for(loop=0;loop < SIZE; loop++){
            printf("%3d",arr[loop]);
        }
    
        getchar();
    
        return 0;
    }
    
    void mergeSort(int arr[],int low,int high)
    {
        int middle;
        if((high -low) >= 1){//当数组中的元素大于等于两个时分割子数组,然后归并
            middle = (low + high) /2;
            mergeSort(arr,low,middle);
            mergeSort(arr,middle+1,high);
            merge(arr,low,middle,middle+1,high);
        }
    }
    
    void merge(int arr[],int low,int high,int low2,int high2)
    {
        int i=low,j=low2,k=low,loop;
        int temp[SIZE];
        while(i <= high && j<=high2){//相互比较,把小的元素放入临时数组temp中
            if(arr[i] <= arr[j]){
                temp[k++] = arr[i++];
            }else{
                temp[k++] = arr[j++];
            }
        }
        if(i == low2){//右数组还有元素
            while(j <= high2){
                temp[k++] = arr[j++];
            }
        }else{//做数组还有元素
            while(i <= high){
                temp[k++] = arr[i++];
            }
        }
        for(loop=low;loop <= high2; loop++){//把临时数组的元素复制到arr中
            arr[loop] = temp[loop];
        }
        
    }
  • 相关阅读:
    Linux 信号:signal 与 sigaction
    Linux shell(1)
    【Beta阶段】第一次scrum meeting
    【Beta阶段】计划安排
    团队作业7——Alpha冲刺之事后诸葛亮
    团队作业5——测试与发布(Alpha版本)
    【Alpha阶段汇总】成果展示与体验总结
    【Alpha阶段】第七次scrum meeting
    【Alpha阶段】第六次scrum meeting
    【Alpha阶段】第五次scrum meeting
  • 原文地址:https://www.cnblogs.com/ShowJoy/p/3601664.html
Copyright © 2011-2022 走看看