zoukankan      html  css  js  c++  java
  • C语言排序系列之归并排序(2)

        归并排序的基本思想是:首先对待排序数组前 n/ 2排序,再对后n / 2排序,然后对两部分进行合并

        流程:1、若n= 1,返回

                2、对前n / 2排序

                    对后n / 2 排序

                3、合并

         时间复杂度为:O(nlgn),推导方法见http://v.163.com/special/opencourse/algorithms.html 麻省理工学院开放课 --算法导论(国外的教学真的比国内的好很多)

         

    /*归并排序:
      时间复杂度:O(nlgn)
    */
    
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    
    void MergeSort(int data[],int length)
    {
        int *tempdata;
        int i = 0;
        int nHead1 = 0;
        int nHead2 = 0;
        if(length == 1)
        {
            return;
        }
        MergeSort(data,(int)(length / 2));
        MergeSort(data + (int)(length / 2),length - (int)(length / 2));
        tempdata = (int*)malloc(length * sizeof(int));
        nHead1 = 0;
        nHead2 = length / 2;
        for(i = 0;i < length;++i)
        {
            if(nHead2 == length || ((nHead1 < (int)(length / 2)) && data[nHead1] < data[nHead2]))
            {
                tempdata[i] = data[nHead1++];
            }
            else
            {
                tempdata[i] = data[nHead2++];
            }
        }
        memcpy(data,tempdata,length * sizeof(int));
    }
    
    int main()
    {
        int data[15] = {4,7,2,6,5,9,3,8,19,11,14,12,17,20,18};
        int i = 0;
        MergeSort(data,15);
        for(i = 0;i < 15;i++)
        {
            printf("%d ",data[i]);
        }
        printf("\n");
        getchar();
        return 0;
    }
  • 相关阅读:
    根据坐标经纬度计算两点之间的距离
    C# 获取类名
    Post、Get请求
    Image和Base64相互转换
    Html checkbox全选
    .NET Core 中间件
    C# DataTable 用法
    imshow(A,[])和imshow(A)的区别
    Log-spectral distance
    CUDA
  • 原文地址:https://www.cnblogs.com/renteng/p/2539064.html
Copyright © 2011-2022 走看看