// 归并排序.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include<iostream>
#define N 100
using namespace std;
typedef int DataType;
//合并data1[begin...mid]和data1[mid+1.end]到data2[begin,end]中,然后复制到data1[begin,end]中
void merge(DataType *data1,DataType *data2,int begin,int mid,int end)
{
int i,j,k;
for(i = begin,j=mid+1,k = begin;i<=mid&&j<=end;k++)
{
if(data1[i]<=data1[j])
data2[k] = data1[i++];
else
data2[k] = data1[j++];
}
if(i<=mid)
while(i<=mid)
data2[k++] = data1[i++];
else
while(j<=end)
data2[k++] = data1[j++];
for(i=begin;i<=end;i++)
data1[i] = data2[i];
}
//归并排序
void Msort(DataType *data1,DataType *data2,int begin,int end)
{
if(begin==end)
data1[begin] = data1[begin];
else
{
int mid = (begin+end)/2;
Msort(data1,data2,begin,mid);
Msort(data1,data2,mid+1,end);
merge(data1,data2,begin,mid,end);
}
}
int _tmain(int argc, _TCHAR* argv[])
{
//data1存储原数据和排序后的数据,data2为辅助数据
DataType data1[N],data2[N];
int cases;
cout<<"请输入案例个数:";
cin>>cases;
while(cases--)
{
int n;
cout<<"请输入元素个数:";
cin>>n;
int i;
cout<<"请输入待排序元素:"<<endl;
for(i=1;i<=n;i++)
cin>>data1[i];
cout<<"归并排序前:"<<endl;
for(i=1;i<=n;i++)
cout<<data1[i]<<" ";
cout<<endl;
Msort(data1,data2,1,n);
cout<<"归并排序后:"<<endl;
for(i=1;i<=n;i++)
cout<<data1[i]<<" ";
cout<<endl;
}
system("pause");
return 0;
}
--------------------------------------------------测试程序-----------------------------------------------------请输入案例个数:2
请输入元素个数:9
请输入待排序元素:
87 65 2 77 88 54 2 7 8
归并排序前:
87 65 2 77 88 54 2 7 8
归并排序后:
2 2 7 8 54 65 77 87 88
请输入元素个数:10
请输入待排序元素:
10 9 8 7 6 5 4 3 2 1
归并排序前:
10 9 8 7 6 5 4 3 2 1
归并排序后:
1 2 3 4 5 6 7 8 9 10
请按任意键继续. . .
分享到:
相关推荐
在C++中实现归并排序,我们需要理解以下几个关键知识点: 1. **分治法**:分治法是计算机科学中常用的一种算法设计策略,它将大问题分解为小问题来解决。归并排序就是典型的分治法应用,它将一个大数组分为两个小数...
使用C++编写的插入&归并排序小程序,略简单,只实现基本功能
归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。
总结,"归并排序插入排序C++代码"的实现可能涉及将这两种排序算法融合在一起,通过判断和选择合适的排序方式来优化排序过程。这种结合方法可以提高算法的灵活性和效率,特别是在处理不同特性的数据集时。学习并理解...
以下是一个简单的链式归并排序C++实现示例: ```cpp #include struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {} }; ListNode* merge(ListNode* l1, ListNode* l2) { //...
基于visual studio2010,的程序开发,...............................................................................................
计算机算法课程的作业,用c++实现了归并排序和快速排序,并比较了两种算法的速度。测试数据为随机生成,可设置为10万、100万、1000万大小的数组。在代码中提供了详细的注释,在容易出错的地方进行了解释。下面是得到...
本文将详细介绍C++中实现的希尔排序、快速排序、堆排序和归并排序这四种经典排序算法。 希尔排序,由Donald Shell于1959年提出,是一种改进的插入排序。它的基本思想是通过设置一个增量序列,将待排序的元素按照...
插入排序、冒泡排序、归并排序、快速排序四种排序方式的C++实现,各写成了一个函数,主函数中可以选择调用那一个。初始化数组时用的是随机种子srand((int)time(0))。在宏中定义数组大小。
根据给定的信息,本文将详细解释归并排序算法在C/C++中的实现方式,并尝试从提供的部分代码片段中解析可能存在的逻辑与应用场景。 ### 归并排序算法简介 归并排序是一种采用分治策略(Divide and Conquer)的排序...
### C++实现典型的归并排序算法 #### 一、引言 归并排序是一种非常高效且稳定的排序算法,它基于分治法的思想,通过将数组分成越来越小的部分,然后逐步合并这些部分来达到最终排序的目的。本文将详细介绍如何在C++...
在C++中实现归并排序,我们可以使用递归的方式来处理。以下是一个基本的步骤概述: 1. 如果数组长度为1,那么它已经是有序的,可以直接返回。 2. 将数组分成两个子数组,每个子数组大约包含原数组的一半元素。 3. ...
完整的自然归并排序算法源程序,可自行输入待排元素个数以及数值,输出排好序的序列。
实现归并方法做排序,程序实现方法简单,是可运行,c语言基础功能
使用C++书写的归并排序算法,希望对各位有用。也请大牛指教代码中有何不足的地方!
快速排序、归并排序、改进的归并排序算法的C++代码。(含测试用例,代码逻辑清晰可运行。) (划分子区间,分别对左右子区间进行排序,开始归并已经排好序的low到high之间的数据。改进后的归并排序对数组元素下标...
本文将深入探讨两种广泛应用的排序算法——归并排序(Merge Sort)和快速排序(Quick Sort),并结合C++语言实现进行性能比较。 归并排序是一种基于分治策略的排序算法。其基本思想是将大问题分解为小问题,再将...
《数据结构》严蔚敏版是计算机科学的经典教材,其中对归并排序有深入的阐述。下面我们将详细探讨归并排序的原理、实现方式以及其在实际应用中的优势。 一、归并排序的基本概念 归并排序的核心思想是将大问题分解为...
使用c++编写的归并排序程序,可以在VC或VS上直接运行。代码调理清楚,并附有详细注释。