您的位置:首页 > 其它

二路归并排序

2013-01-02 10:51 176 查看
//============================================================================

// 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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: