数据结构-排序-归并排序(c++实现)

 #include<iostream>
using namespace std;

void Merge(int L[], int s, int m, int t) {
	int LIFT_SIZE = m - s + 1;
	int RIGHT_SIZE = t - m;
	int* left = new int[LIFT_SIZE];
	int* right = new int[RIGHT_SIZE];
	int i, j;
	for (i = s, j = 0; i <= m; i++) {
		left[j++] = L[i];
	}
	for (i = m + 1, j = 0; i <= t; i++) {
		right[j++] = L[i];
	}
	int cnt = s, k = 0;
	j =0;
	while (k < LIFT_SIZE && j < RIGHT_SIZE) {
		if (left[k] < right[j])
			L[cnt++] = left[k++];
		else if(left[k]>right[j])
			L[cnt++] = right[j++];
		else {
			L[cnt++] = left[k++];
			L[cnt++] = right[j++];
		}
	}
	while (k < LIFT_SIZE) {
		L[cnt++] = left[k++];
	}
	while (j < RIGHT_SIZE) {
		L[cnt++] = right[j++];
	}
}

void MergeSort(int L[],int s,int t) {
	if (s < t) {
		int m = s + (t-s) / 2;
		MergeSort(L, s, m);
		MergeSort(L, m + 1, t);
		Merge(L, s, m, t);
	}
}

 

int main() {
	int L[] = { 1,5,3,7,6,9 };
	MergeSort(L, 0, 5);
	for (int i = 0; i <= 5; i++)
		cout << L[i] << " ";

}

猜你喜欢

转载自blog.csdn.net/qq_43710881/article/details/105894871