zoukankan      html  css  js  c++  java
  • 例24:归并排序

    在之前算法考试之前看过归并排序,当时觉得好难啊,卧槽怎么会有这么难的排序算法啊什么的。但是如今再一看其实略一眼就明白了,其原理非常简单,就是通过分成两个已排序的数组合并到一块而已,合并的时候也没有什么特别的技巧,也就是一个个比较而已额。其步骤大概是(个人算法的步骤,还有其他的如多路归并排序或者细节有些不同,但我个人是这样写的):

    1.将给定数组递归不断的分成两半,直到数组元素只有一个为止。

    2.认为一个元素的数组是已排序的数组,此时数组已不能再分,开始合并。

    3.两个数组合并时,元素由前到后有序一一进行比较,大者不动,小者添加到新的数组中并使数组遍历的下标i加一,直到两者其中一者元素遍历完成为止。

    4.由于合并的两个数组都是有序的,将俩者中未完成的一组直接按顺序添加到新数组中,将新数组赋入原数组中,结束此轮递归进入上一轮,直到最初的递归函数为止,排序结束。

    代码如下:

     1 #include<stdio.h> 
     2 #include<stdlib.h>
     3 
     4 void MergeArraySort(int a[],int first,int mid,int last,int temp[])
     5 {
     6      int i = first,n = mid;
     7      int j = mid+1,m = last;
     8      int k = 0;
     9      while(i<=n && j<=m)
    10      {
    11                   if(a[i] < a[j])
    12                   {
    13                           temp[k++] = a[i++];
    14                   }
    15                   else 
    16                   {
    17                           temp[k++] = a[j++];
    18                   }
    19      }
    20      while(i<=n)
    21      {
    22                 temp[k++] = a[i++];
    23      }
    24      while(j<=m)
    25      {
    26                 temp[k++] = a[j++];
    27      }
    28      for(i = first; i<=last; i++)
    29      {
    30            a[i] = temp[i-first];
    31      }
    32 }
    33 
    34 void MergeSort(int a[],int first,int last,int temp[])
    35 {
    36      if(first < last)
    37      {
    38               int mid = (first + last)/2;
    39               MergeSort(a,first,mid,temp);
    40               MergeSort(a,mid+1,last,temp);
    41               MergeArraySort(a,first,mid,last,temp);
    42      }
    43 }
    44 int main()
    45 {
    46     int pArray[20],nCount,tempArray[20];
    47     while(~scanf("%d",&nCount) && nCount)
    48     {
    49                                for(int i = 0;i<nCount;i++)
    50                                {
    51                                        scanf("%d",&pArray[i]);
    52                                }
    53                                MergeSort(pArray,0,nCount-1,tempArray);
    54                                for(int i = 0;i<nCount;i++)
    55                                {
    56                                        printf("%d ",pArray[i]);
    57                                }
    58                                printf("
    ");
    59     }
    60     
    61     return 0;
    62 }
  • 相关阅读:
    centos 安装 TortoiseSVN svn 客户端
    linux 定时任务 日志记录
    centos6.5 安装PHP7.0支持nginx
    linux root 用户 定时任务添加
    composer 一些使用说明
    laravel cookie写入
    laravel composer 安装指定版本以及基本的配置
    mysql 删除重复记录语句
    linux php redis 扩展安装
    linux php 安装 memcache 扩展
  • 原文地址:https://www.cnblogs.com/FWFC/p/6287174.html
Copyright © 2011-2022 走看看