//============================================================================
// Name : merge_sort.cpp
// Author :
// Version :
// Copyright : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================
#include <iostream>
#include<stdlib.h>
#include<stdio.h>
#include<time.h>
using namespace std;
void generate(int *p, int n) {
srand((int) time(0));
for (int i = 0; i < n; i++) {
*p++ = rand();
}
}
void output(int *p, int n) {
for (int i = 0; i < n; i++) {
printf("%d ", *p++);
}
printf("\n");
}
void merge(int *p, int low, int mid, int high) {
int *tmp = new int[high - low + 1];
int left = low, right = mid + 1, index = 0;
while (left <= mid && right <= high) {
if (p[left] <= p[right]) {
tmp[index++] = p[left++];
} else {
tmp[index++] = p[right++];
}
}
if (left <= mid) {
while (left <= mid) {
tmp[index++] = p[left++];
}
}
if (right <= high) {
while (right <= high) {
tmp[index++] = p[right++];
}
}
for(int i=0;i<index;i++) {
p[i+low] = tmp[i];
}
delete []tmp;
}
void merge_sort(int *p,int low,int high) {
if(low<high) {
int mid=(low+high)>>1;
merge_sort(p,low,mid);
merge_sort(p,mid+1,high);
merge(p,low,mid,high);
}
}
int main() {
int a[15];
generate(a, 15);
output(a, 15);
merge_sort(a,0,14);
output(a, 15);
return 0;
// Name : merge_sort.cpp
// Author :
// Version :
// Copyright : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================
#include <iostream>
#include<stdlib.h>
#include<stdio.h>
#include<time.h>
using namespace std;
void generate(int *p, int n) {
srand((int) time(0));
for (int i = 0; i < n; i++) {
*p++ = rand();
}
}
void output(int *p, int n) {
for (int i = 0; i < n; i++) {
printf("%d ", *p++);
}
printf("\n");
}
void merge(int *p, int low, int mid, int high) {
int *tmp = new int[high - low + 1];
int left = low, right = mid + 1, index = 0;
while (left <= mid && right <= high) {
if (p[left] <= p[right]) {
tmp[index++] = p[left++];
} else {
tmp[index++] = p[right++];
}
}
if (left <= mid) {
while (left <= mid) {
tmp[index++] = p[left++];
}
}
if (right <= high) {
while (right <= high) {
tmp[index++] = p[right++];
}
}
for(int i=0;i<index;i++) {
p[i+low] = tmp[i];
}
delete []tmp;
}
void merge_sort(int *p,int low,int high) {
if(low<high) {
int mid=(low+high)>>1;
merge_sort(p,low,mid);
merge_sort(p,mid+1,high);
merge(p,low,mid,high);
}
}
int main() {
int a[15];
generate(a, 15);
output(a, 15);
merge_sort(a,0,14);
output(a, 15);
return 0;
}
核心思想是分治和递归
T(n)=o(nlogn)
S(n)=o(n)