deque<int> merge(deque<int>leftVec, deque<int>rightVec) {
deque<int> ret;
//reverse(leftVec.begin(), leftVec.end());
//reverse(rightVec.begin(), rightVec.end());
while (leftVec.size()>0&&rightVec.size()>0)
{
if (leftVec.front() <= rightVec.front()) {
ret.push_back(leftVec.front());
leftVec.pop_front();
}
else {
ret.push_back(rightVec.front());
rightVec.pop_front();
}
}
while (leftVec.size())
{
ret.push_back(leftVec.front());
leftVec.pop_front();
}
while (rightVec.size()>0)
{
ret.push_back(rightVec.front());
rightVec.pop_front();
}
return ret;
}
deque<int> mergeSort(const deque<int>& vec)
{
if (vec.size() < 2) {
return vec;
}
int middle = floor(vec.size() / 2);
deque<int> leftVec(vec.begin(), vec.begin() + middle);
deque<int> rightVec(vec.begin() + middle, vec.end());
return merge(mergeSort(leftVec), mergeSort(rightVec));
}
void test()
{
int arr[10] = { 6,5,7,3,8,1,2,9,4,0 };
int lenght1 = sizeof(arr);
int lenght2 = sizeof(arr[0]);
int lenght = lenght1 / lenght2;
/* for (int i = 0; i < lenght; i++) {
for (int j = 0; j < (lenght - i-1); j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j+1] = temp;
}
}
}*/
/* int index = 0;
while (index < lenght)
{
for (int i = (index+1); i < lenght; i++) {
if (arr[index] > arr[i])
{
int temp = arr[index];
arr[index] = arr[i];
arr[i] = temp;
}
}
index++;
}*/
//int index = 0;
//while (index < lenght)
//{
// for (int i = index - 1; i >= 0; i--)
// {
// if (arr[i+1] < arr[i]) {
// int temp = arr[i+1];
// arr[i+1] = arr[i];
// arr[i] = temp;
// }
// }
// index++;
//}
deque<int> leftVec = { 6,5,7,3,8,1,2,9,4,0 };
deque<int> vc = mergeSort(leftVec);
for (int i = 0; i < lenght; i++)
{
cout << arr[i] << "->";
}
}
稳定性:排序后 2 个相等键值的顺序和排序之前它们的顺序相同
选择 n2(时间),1(空间),不稳定
冒泡:n2(时间),1(空间),稳定
插入:n2(时间),1(空间),稳定
归并:nlogn (时间),n(空间) ,稳定