#include <iostream>
using namespace std;
//假定A[p..q]、A[q+1..r]均已经排序;p<=q<r;
void MERGE(int A[], int p, int q, int r)
{
const int maxnum = 2147483647;
int n1 = q-p+1;
int n2 = r-q;
int *L = new int[n1+1];
int *R = new int[n2+1];
int i,j;
for (i = 0; i != n1; ++i)
{
L[i] = A[p+i];
}
for (j = 0; j != n2; ++j)
{
R[j] = A[q+j+1];
}
L[n1] = maxnum;
R[n2] = maxnum;
i = 0;
j = 0;
for (int k = p; k != r+1; ++k)
{
if(L[i] < R[j])
{
A[k] = L[i];
++i;
}
else
{
A[k] = R[j];
++j;
}
}
delete[] L;
delete[] R;
}
//数组版本,分治排序,递归;
void MERGESORT(int A[], int p, int r)
{
if (p < r)
{
int q = int((p+r)/2);
MERGESORT(A, p, q);
MERGESORT(A, q+1, r);
MERGE(A, p, q, r);
}
}
//数组版本的插入排序;
void INSERTSORT(int A[], int length)
{
for (int j = 1; j != length; ++j)
{
int key = A[j];
int i = j - 1;
while ((i >= 0)&&(A[i] > key))
{
A[i+1] = A[i];
--i;
}
A[i+1] = key;
}
}
int main()
{
int A[10] = {6,8,0,1,3,5,7,9,2,4};
//MERGESORT(A,0,9);
INSERTSORT(A,10);
for (int i = 0; i != 10; ++i)
{
cout << A[i] << endl;
}
system("pause");
return 0;
}
【算法导论】 第二章 插入排序、分治排序
最新推荐文章于 2019-08-09 19:25:17 发布