Sort.h
#pragma once
using namespace std;
class Sort
{
public:
void StraightInsertionSort(int data[], int length);
void BinaryInsertionSort(int data[], int length);
void TwoWayInsertionSort(int data[], int length);
void ShellSort(int data[], int length);
void BubbleSort(int data[], int length);
void QuickSort(int data[], int length, int low = 0, int high = 9);
void SelectionSort(int data[], int length);
void TreeSelectionSort(int data[], int length);
void HeapSort(int data[], int length);
void AdjustHeap(int data[], int length, int start);
void MergingSort(int data[], int length, int low = 0, int high = 9);
void RadixSort(int data[], int length);
public:
int Mod(int x, int y);
void ShowReasult(int data[], int length);
};
Sort.cpp
void Sort::MergingSort(int data[], int length, int low, int high)
{
if (low < high)
{
/*
后序递归
*/
int middle = (low + high) / 2;
MergingSort(data, middle - low + 1, low, (low + high) / 2);
MergingSort(data, high - middle + 2, (low + high) / 2 + 1, high);
int head1 = low;
int tail1 = middle;
int head2 = middle + 1;
int tail2 = high;
int i = 0;
/*
申请辅助数组存放数据
*/
int * arr = new int[high - low + 1];
while (head1 <= tail1&&head2 <= tail2)
{
if (data[head1] < data[head2])
{
arr[i++] = data[head1++];
}
else
{
arr[i++] = data[head2++];
}
}
while (head1 <= tail1)
{
arr[i++] = data[head1++];
}
while (head2 <= tail2)
{
arr[i++] = data[head2++];
}
memcpy(data + low, arr, (high - low + 1) * sizeof(int));
ShowReasult(data, 10);
}
}