Java教程

归并排序

本文主要是介绍归并排序,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

归并排序

1.先将数组进行二分

2,对每一部分进行排序,然后合并

#include<iostream>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<vector>
#include<queue>
using namespace std;

int a[10] = { 0,423,365,567,994,234,5,54,234,24 };
void merge_sort(int l, int r);
int main()
{
	merge_sort(1, 9);
	for (int i = 1; i <= 9; i++)
		cout << a[i] << " ";
	return 0;
}

void merge_sort(int l, int r)
{
	if (l == r)
		return;
	int mid = (l + r) / 2;
	merge_sort(l, mid);//将数组分成左部分
	merge_sort(mid + 1, r);//将数组分成右半部分
//将左右部分合并操作
	int temp[10], top = l;
	for (int i = l, j = mid + 1; i <= mid || j <= r;)
	{
		if (i > mid)
		{
			while (j <= r)
			{
				temp[top] = a[j]; j++; top++;
			}
			break;
		}
		if (j > r)
		{
			while (i <= mid)
			{
				temp[top] = a[i]; i++; top++;
			}
			break;
		}
		if (a[i] <= a[j])
		{
			temp[top] = a[i]; i++;
		}
		else
		{
			temp[top] = a[j]; j++;
		}
		top++;
	}
	for (int i = l; i <= r; i++)
		a[i] = temp[i];
}
这篇关于归并排序的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!