(目前只写了这五个,后续的在更)
void BubbleSort(int a[], long size)
{
// 冒泡排序
for (long i = 0; i < size; i++)
{
bool flag = true;
for (long j = 0; j < size - i - 1; j++)
{
if (a[j] > a[j + 1])
{
swap(a[j], a[j + 1]);
flag = false;
}
}
if (flag)
{
return;
}
}
}
void SelectSort(int a[], long size)
{
// 选择排序
for (long i = 0; i < size; i++)
{
int minnum = a[i];
long index = i;
for (long j = i; j < size; j++)
{
if (a[j] <= minnum)
{
minnum = a[j];
index = j;
}
}
swap(a[index], a[i]);
}
}
void InsertSort(int a[], long size)
{
// 插入排序
for (long i = 1; i < size; i++)
{
int temp = a[i];
long j;
for (j = i - 1; j >= 0; j--)
{
if (a[j] > temp)
{
a[j + 1] = a[j];
}
else
{
break;
}
}
a[j + 1] = temp;
}
}
void MergeSort(int a[], long l, long r)
{
// 归并排序
if (r - l < 2)
{
return;
}
long m = (l + r) / 2;
MergeSort(a, l, m);
MergeSort(a, m, r);
Merge(a, l, m, r);
}
void Merge(int a[], long l, long m, long r)
{
long ml = m - l;
int *b = new int[ml];
for (long i = 0; i < ml; i++)
b[i] = a[l + i];
long x = 0, y = m;
for (long i = l; i < r;)
{
if ((b[x] <= a[y] && x < ml) || y >= r)
{
a[i++] = b[x++];
}
if ((a[y] < b[x] && y < r) || x >= ml)
{
a[i++] = a[y++];
}
}
delete[] b;
}
void QuickSort(int a[], int l, int r)
{
// 快速排序
if (l < r)
{
int i = l, j = r, x = a[l];
while (i < j)
{
while (i < j && a[j] >= x) // 从右向左找第一个小于x的数
{
j--;
}
if (i < j)
{
a[i++] = a[j];
}
while (i < j && a[i] < x) // 从左向右找第一个大于等于x的数
{
i++;
}
if (i < j)
{
a[j--] = a[i];
}
}
a[i] = x;
QuickSort(a, l, i - 1); // 递归调用
QuickSort(a, i + 1, r);
}
}