合并排序算法

合并排序依赖于合并操作,即将两个已经排序的序列合并成一个序列,具体的过程如下:

1申请空间,使其大小为两个已经排序序列之和,然后将待排序数组复制到该数组中。

2设定两个指针,最初位置分别为两个已经排序序列的起始位置

3 比较复制数组中两个指针所指向的元素,选择相对小的元素放入到原始待排序数组中,并移动指针到下一位置

4重复步骤3直到某一指针达到序列尾

5 将另一序列剩下的所有元素直接复制到原始数组末尾

代码参考
https://blog.csdn.net/fly_yr/article/details/8550097?ops_request_misc=&request_id=&biz_id=102&utm_term=%E5%90%88%E5%B9%B6%E6%8E%92%E5%BA%8F&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-1-8550097.142v99pc_search_result_base5&spm=1018.2226.3001.4187

#include <iostream>
#include <stdlib.h>
#include <time.h>
#define N 15
using namespace std;
 
void Merge(int * array,int low,int middle,int high);
void MergeSort(int * array,int low,int high);
int main()
{
   
	int array[N];
    srand(time(0));//设置随机化种子,避免每次产生相同的随机数
	for(int i=0 ; i<N ; i++)
	{
   
		array[i] = rand()%101;//数组赋值使用随机函数产生1-100之间的随机数
	}
	cout<<"排序前:"<<endl;
	for(int j=0;j<N;j++)
	{
   
		cout<<array[j]<<"  ";
	}
	cout<<endl<<"排序后:"<<endl;
	//调用合并排序函数对该数组进行排序
	MergeSort(array,0,N-1);
	for(int k=0;k<N;k++)
	{
   
		cout<<array[k]<<"  ";
	}
	cout<<endl;
	return 0;
}//main
 
void MergeSort(int *array,int low,int high)
{
   
	if(low<high)
	{
   
		int middle = (low+high)/2;
		MergeSort(array,low,middle);
		MergeSort(array,middle+1,high);//注意取值middle+1 至 q
		Merge(array,low,middle,high);
	}//if
}//MergeSort
void Merge(int *array,int low,int middle,int high)
{
   
	int lSize = middle-low+1;//low至middle之间的数据个数
	int rSize = high-middle;//middle至high之间的数据个数
	int *lArray = new int[lSize];//声明左半边数组
	int *rArray = new int[rSize];//声明右半边数组
	for(int i=0;i<lSize;i++)
	{
   
		lArray[i] = array[low+i];//为左半边数组赋值
	}//for
 
	for(int j=0;j<rSize;j++)
	{
   
		rArray[j] = array[middle+j+1];//为右半边数组赋值
	}//for
 
	/*a为了Array数组的循环变量,b为rArray数组的循环变量,
	 *k为原数组array的循环变量
	 */
	int a=0,b=0,k;
	for(k=low;k<=high;k++)
	{
   
		if(a>=lSize)
		{
   
			array[k] = rArray[b++];
		}else if(b>=rSize){
   
			array[k] = lArray[a++];
		}else{
   
			if(lArray[a]<=rArray[b])
			{
   
				array[k] = lArray[a++];
			}else{
   
				array[k] = rArray[b++];
			}//else
		}//else
	}//for
}//Merge

相关推荐

  1. 合并排序算法

    2024-02-05 13:16:03       58 阅读
  2. 排序算法合并两个有序数组

    2024-02-05 13:16:03       58 阅读
  3. 合并排序算法的时间复杂度是多少?

    2024-02-05 13:16:03       48 阅读
  4. 数据结构—两个有序单链表的合并排序算法

    2024-02-05 13:16:03       47 阅读
  5. 排序算法——冒泡排序

    2024-02-05 13:16:03       62 阅读
  6. 排序算法——快速排序

    2024-02-05 13:16:03       58 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-05 13:16:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-05 13:16:03       101 阅读
  3. 在Django里面运行非项目文件

    2024-02-05 13:16:03       82 阅读
  4. Python语言-面向对象

    2024-02-05 13:16:03       91 阅读

热门阅读

  1. JVM介绍

    JVM介绍

    2024-02-05 13:16:03      46 阅读
  2. HTTP/2

    2024-02-05 13:16:03       45 阅读
  3. 开源Vue UI框架

    2024-02-05 13:16:03       53 阅读
  4. 力扣292-Nim游戏

    2024-02-05 13:16:03       56 阅读
  5. 前端简历内容模板

    2024-02-05 13:16:03       46 阅读
  6. iframe通信,window.postMessage父子项目数据通信

    2024-02-05 13:16:03       55 阅读
  7. NLP自然语言处理

    2024-02-05 13:16:03       53 阅读