插入排序1:
void InsertSort_1(int Array[], int n)
{
for (int i = 1; i < n; ++i)
{
int key = Array[i];
int j = i - 1;
while (j >= 0 && Array[j] > key)
{
Array[j + 1] = Array[j];
--j;
}
Array[++j] = key;
}
}
插入排序2:
void InsertSort_2(int Array[], int n)
{
for (int i = 1; i < n; ++i)
{
int key = Array[i];
int first = 0;
int last = i - 1;
while (first <= last)
{
int mid = (first + last) / 2;
if (Array[mid] <= key)
{
first = mid + 1;
}
else
{
last = mid - 1;
}
}
for (int j = i - 1; j >= first; --j)
{
Array[j + 1] = Array[j];
}
Array[first] = key;
}
}
归并排序中的合并子过程1:
void Merge_1(int Array[], int p, int q, int r)
{
int n1 = q - p + 1;
int n2 = r - q;
int *left = new int[n1 + 1];
int *right = new int[n2 + 1];
int i, j;
for (i = 0; i < n1; ++i)
{
left[i] = Array[p + i];
}
for (j = 0; j < n2; ++j)
{
right[j] = Array[q + j + 1];
}
left[n1] = numeric_limits<int>::max();
right[n2] = numeric_limits<int>::max();
i = j = 0;
for (int k = p; k < r + 1; ++k)
{
if (left[i] <= right[j])
{
Array[k] = left[i];
++i;
}
else
{
Array[k] = right[j];
++j;
}
}
delete[] left;
delete[] right;
}
归并排序中的合并子过程2:
void Merge_2(int Array[], int p, int q, int r)
{
int n1 = q - p + 1;
int n2 = r - q;
int *left = new int[n1];
int *right = new int[n2];
int i, j;
for (i = 0; i < n1; ++i)
{
left[i] = Array[p + i];
}
for (j = 0; j < n2; ++j)
{
right[j] = Array[q + j + 1];
}
i = j = 0;
int k = p;
while (i < n1 && j < n2)
{
if (left[i] <= right[j])
{
Array[k] = left[i];
++i;
}
else
{
Array[k] = right[j];
++j;
}
++k;
}
while (i < n1)
{
Array[k] = left[i];
++k;
++i;
}
while (j < n2)
{
Array[k] = right[j];
++k;
++j;
}
delete[] left;
delete[] right;
}