归并排序--递归和非递归版

归并排序–递归实现

#include <iostream>
using namespace std;
int* a = new int[100];
void Merge(int* arr, int left, int mid, int right){
	for(int i = left; i <= right; i++){
		a[i] = arr[i];
	}
	int i, j, k;
	for(i = left, j = mid + 1, k = i; i <= mid&&j <= right; k++){
		if(a[i] <= a[j]){
			arr[k] = a[i++];
		}else{
			arr[k] = a[j++];
		}
	}
	while(i <= mid){
		arr[k++] = a[i++];
	}
	while(j <= right){
		arr[k++] = a[j++];
	}
}
void Mergesort(int* arr, int left, int right){
	if(left < right){
		int mid = (left + right)/2;
		Mergesort(arr, left, mid);
		Mergesort(arr, mid+1, right);
		Merge(arr, left, mid, right);
	}
}
int main(){
	int arr[] = {123, 11, 33, 23, 24, 23, 111};
	int len = sizeof(arr)/sizeof(arr[0]);
	Mergesort(arr, 0, len-1);
	for(int i = 0; i < len; i++){
		cout << arr[i] << " ";
	}
	cout << endl;
	delete[] a;
	return 0;
}

归并排序–非递归实现

#include <iostream>
#include <stack>
using namespace std;
int* a = new int[100];
void Merge(int* arr, int left, int mid, int right){
	for(int i = left; i <= right; i++){
		a[i] = arr[i];
	}
	int i, j, k;
	for(i = left, j = mid + 1, k = i; i <= mid&&j <= right; k++){
		if(a[i] <= a[j]){
			arr[k] = a[i++];
		}else{
			arr[k] = a[j++];
		}
	}
	while(i <= mid){
		arr[k++] = a[i++];
	}
	while(j <= right){
		arr[k++] = a[j++];
	}
}
void Mergesort(int* arr, int left_, int right_){
	int size = 1;
    int right, left, mid;
    int len = right_ - left_ + 1;
    while(size <= len - 1){
        left = 0;
        while(left + size <= len - 1){
            mid = left + size -1;
            right = mid + size;
            if(right > len - 1){
                right = len - 1;
            }
            Merge(arr, left, mid, right);
            left = right + 1;
        }
        size *= 2;
    }
}
int main(){
	int arr[] = {123, 11, 33, 23, 24, 23, 111};
	int len = sizeof(arr)/sizeof(arr[0]);
	Mergesort(arr, 0, len-1);
	for(int i = 0; i < len; i++){
		cout << arr[i] << " ";
	}
	cout << endl;
	delete[] a;
	return 0;
}
发布了21 篇原创文章 · 获赞 0 · 访问量 163

猜你喜欢

转载自blog.csdn.net/qq_45227330/article/details/105011019