码迷,mamicode.com
首页 > 编程语言 > 详细

归并排序

时间:2015-05-28 18:12:01      阅读:173      评论:0      收藏:0      [点我收藏+]

标签:c-c++   排序算法   

归并排序

// 归并排序.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include<stdio.h>
#include<windows.h>
void select_sort(int[],int);
void merge_sort(int[],int[],int[],int,int);
void main()
{
    int data1[10], data2[10], data3[20];
    int size1 = 0, size2 = 0, i;
    //要求输入两组数据做归并
    printf("\nPlease enter data1 to sort(enter 0 when end):\n");
    printf("Number: ");
    do
    {
        scanf("%d",&data1[size1]);
    } while (data1[size1++] != 0);
    printf("Please enter data2 to sort(enter 0 when end):\n");
    printf("Number: ");
    do
    {
        scanf("%d",&data2[size2]);
    } while (data2[size2++]!=0);
    //先使用选择排序将两组数据排序,再做归并
    select_sort(data1,--size1);
    select_sort(data2,--size2);
    for (i = 0; i < 60; i++)   printf("-");
    printf("\nData1: ");
    for (i = 0; i < size1; i++)
        printf("%d ",data1[i]);
    printf("\n");
    printf("Data2:");
    for (i = 0; i < size2; i++)
        printf("%d ",data2[i]);
    printf("\n");
    for (i = 0; i < 60; i++)  printf("-");
    printf("\n");
    merge_sort(data1,data2,data3,size1,size2);
    for (i = 0; i < 60; i++)  printf("-");
    printf("\nSorting:");
    for (i = 0; i < size1 + size2; i++)
        printf("%d ",data3[i]);
    printf("\n");
    system("pause");
}
void select_sort(int data[], int size)
{
    int base, compare, min, temp;
    for (base = 0; base < size - 1; base++)
    {
        min = base;
        for (compare=base+1; compare < size; compare++)
        if (data[compare] < data[min])
            min = compare;
        temp = data[min];
        data[min] = data[base];
        data[base] = temp;
    }
}
void merge_sort(int data1[], int data2[], int data3[], int size1, int size2)
{
    int arg1, arg2, arg3, i;
    data1[size1] = 32767;
    data2[size2] = 32767;
    arg1 = 0;
    arg2 = 0;
    for (arg3 = 0; arg3 < size1 + size2; arg3++)
    {//比较两组数据,数据小的先存于归并后的数列
        if (data1[arg1] < data2[arg2])
        {
            data3[arg3] = data1[arg1];
            arg1++;
        }
        else
        {
            data3[arg3] = data2[arg2];
            arg2++;
        }
        printf("Access: ");
        for (i = 0; i < arg3 + 1; i++)
            printf("%d ",data3[i]);
        printf("\n");
    }
}

技术分享

归并排序

标签:c-c++   排序算法   

原文地址:http://blog.csdn.net/u011233535/article/details/46124951

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!