自己写的三叉归并排序(比STL::sort快一点点)

1 #ifndef THREEMERGESORT_H
2 #define THREEMERGESORT_H
3
4 const int size = 100000; //The size of array
5
6 void ThreeMerge(int *, int, int);
7 void Merge(int *, int, int, int, int);
8 void Merge2(int *,int,int,int);
9
10 #endif
1 #include<iostream>
2 #include"ThreeMergeSort.h"
3
4 using namespace std;
5
6 int b[size] = {0};
7
8 void ThreeMerge(int *a, int left, int right)
9 {
10 int n = right-left+1;
11 int mid1 = left+n/3-1;
12 int mid2 = right-(n+2)/3;
13
14 if(mid1 >= mid2)
15 return;
16
17 ThreeMerge(a, left, mid1);
18 ThreeMerge(a, mid1+1, mid2);
19 ThreeMerge(a, mid2+1, right);
20 Merge(a, left, mid1, mid2, right);
21 }
22
23 void Merge(int a[], int left,int mid1, int mid2, int right)
24 {
25 Merge2(a, left, mid1, mid2);
26 Merge2(a, left, mid2, right);
27 }
28 void Merge2(int a[], int left,int mid,int right)
29 {
30 int d1 = left;
31 int d2 = mid+1;
32 int l = left;
33
34 while(d1<=mid && d2<=right)
35 {
36 if(a[d1] > a[d2])
37 b[l++] = a[d2++];
38 else if(a[d1] <= a[d2])
39 b[l++] = a[d1++];
40 }
41 if(d1 == mid+1)
42 {
43 for(int i=d2; i<=right; i++)
44 b[l++] = a[i];
45 }
46 else if(d2 == right+1)
47 {
48 for(int i=d1; i<=mid; i++)
49 b[l++] = a[i];
50 }
51 for(int i=left; i<=right; i++)
52 {
53 a[i] = b[i];
54 }
55 }
经过测试发现比STL的sort()快一点点。只是写来玩玩,用了三个递归,然后合并三个分块来排序。
posted @ 2011-06-20 04:20  Sw_R  阅读(210)  评论(0编辑  收藏  举报