您的位置:首页 > 其它

归并排序(merge sort)源码

2008-09-30 21:06 330 查看
#include <iostream>

using namespace std;

void merge(int ia[], int p, int q, int r)

{

int n1 = q - p + 1; // n1 = [p, q]

int n2 = r - q; // n2 = (q, r]

int ia1[n1];

int ia2[n2];

for(int i=0; i<n1; i++)

{

ia1[i] = ia[p+i];

}

ia1[n1] = 0x7FFFFFFF; // sentinel

for(int i=0; i<n2; i++)

{

ia2[i] = ia[q+1+i];

}

ia2[n2] = 0x7FFFFFFF; // sentinel



int i, j, k;

i = j = 0;

k = p;



while( k <= r )

{

if( ia1[i]<=ia2[j] )

{

ia[k] = ia1[i];

i++;

}

else

{

ia[k] = ia2[j];

j++;

}

k++;

}

}

void MergeSort(int ia[], int p, int q)

{

if(q > p)

{

int r = (p+q)/2;

MergeSort(ia, p, r);

MergeSort(ia, r+1, q);

merge(ia, p, r, q);

}

}

int main()

{

int ia[6] = {6,5,4,3,2,1};

MergeSort(ia, 0, 5);

for(int i=0; i<6; i++)

{

cout << ia[i] << endl;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: