归并排序-有递归描述过程

引用:图解排序算法(四)之归并排序

#include<iostream>
#include<ctime>
#include<cstdlib>
using namespace std;
const int N = 10;
void mergeSort ( int *arr, int left, int mid, int right )
{
	int i = left;
	int j = mid + 1;
	int t = 0;
	int *temp = new int[right + 1];
	while ( i <= mid && j <= right ) //小的放进临时数组
	{
		if ( arr[i] < arr[j] )
			temp[t++] = arr[i++];

		else
			temp[t++] = arr[j++];
	}
	while ( i <= mid )
		temp[t++] = arr[i++];
	while ( j <= right )
		temp[t++] = arr[j++];
	t = 0;
	while ( left <= right )//要小于等于因为要赋值rgiht+1次,比如arr[0-2],就是3次
		arr[left++] = temp[t++];
	delete []temp;
}

void sort ( int *arr, int left, int right )
{
	if ( left < right )
	{
		int mid = ( left + right ) / 2;
		sort ( arr, left, mid );
		sort ( arr, mid+1, right );
		mergeSort ( arr, left, mid, right );
	}
}



int main()
{
	srand ( time ( 0 ) );
	int arr[N];
	int i = 0;
	while ( i < N )
	{
		arr[i++] = rand() % 100;

	}

	i = 0;
	cout << "Original:" << endl;
	while ( i < N )
	{
		cout << arr[i++] << " ";
	}
	cout << endl;

	sort ( arr, 0, N - 1 );

	i = 0;
	cout << "Sort:" << endl;
	while ( i < N )
	{
		cout << arr[i++] << " ";
	}

	return 0;
}

(递归的过程)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值