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];
        }
        
    }
  • 相关阅读:
    关于主板集成声卡
    Sql Server 關於獲取數據庫名,表名及字段名的幾個語句。
    RadioButtonList控制表格显示
    动态網頁及程序生成解决方案
    正則表達式在不同環境中的使用方法
    SQL語句優化
    網頁打印如果設置邊線不顯示
    项目相关技术总结
    [转]DOS命令
    电影记录
  • 原文地址:https://www.cnblogs.com/ShowJoy/p/3601664.html
Copyright © 2011-2022 走看看