5冒泡排序:
冒泡排序的思想是(按照升序):如果前一个数大于后一个数,那么就交换,如图所示:
冒泡排序实现的实现:
void BublesSort(int* a, size_t n)
{
assert(a);
int end = n;
while (end > 0)
{
bool exchange = false;//如果这已经是个有序的数列
for (int i = 1; i < n; ++i)
{
if (a[i - 1]>a[i]);
{
swap(a[i - 1], a[i]);
}
}
if (exchange = false)
{
break;
}
end--;
}
}
6,归并排序:
它的排序思想需要创建一个临时的数组如图所示:
归并排序的实现:
void Merge(int* a, int* tmp, int begin1, int end1, int begin2, int end2)
{
size_t pos = begin1;
size_t index = 0;
while (begin1 <= end1&&begin2 <= end2)
{
if (a[begin1] < a[begin2])
{
tmp[index++] = a[begin1++];
}
else
{
tmp[index++] = a[begin2++];
}
while (begin1 < end1)
{
tmp[index++] = a[begin1++];
}
while (begin2 < end2)
{
tmp[index++] = a[begin2++];
}
}
memcpy(a, tmp, sizeof(int)*(end2 - pos + 1));
}
void _MergeSort(int* a, int* tmp, int left, int right)
{
int mid = left + (right - left) / 2;
_MergeSort(a, tmp, left, mid);
_MergeSort(a, tmp, mid + 1, right);
Merge(a, tmp, left, mid, mid + 1, right);//归并
}
void MergeSort(int* a, size_t n)
{
assert(a);
int* tmp = new int[n];
_MergeSort(a, a,0, n - 1);
delete[] tmp;
}
不难看出归并算法的渐进时间成本取决于其中循环迭代的总次数。