归并排序
#include<iostream>
using namespace std;
void merge(int a[], int s, int m, int e, int tmp[])
{
int pb = 0;
int p1 = s, p2 = m+1;
while (p1<=m&&p2<=e)
{
if (a[p1] > a[p2])
tmp[pb++] = a[p2++];
else
tmp[pb++] = a[p1++];
}
while (p1<=m)
{
tmp[pb++] = a[p1++];
}
while (p2<=e)
{
tmp[pb++] = a[p2++];
}
for (int j = 0; j <= e-s; ++j)
{
a[s+j] = tmp[j];
}
}
void mergesort(int a[], int s, int e, int tmp[])
{
if (s < e)
{
int m = s + (e - s) / 2;
mergesort(a, s, m, tmp);
mergesort(a, m + 1, e, tmp);
merge(a, s, m, e, tmp);
}
}
int a[9] = { 1,2,3,6,5,4,7,8,9 };
int b[9];
int main()
{
mergesort(a, 0, 8, b);
for (int i = 0; i < 9; i++)
{
cout << a[i] << ' ';
}
return 0;
}
快速排序
#include<iostream>
using namespace std;
void quicksort(int a[], int s, int e) {
if (s >= e)
return;
int k = a[s];
int i = s, j = e;
while (i!=j)
{
while (j > i&&a[j] >= k)--j;
swap(a[i], a[j]);
while (i < j&&a[i] <= k)++i;
swap(a[i], a[j]);
}
quicksort(a, s, i - 1);
quicksort(a, i + 1, e);
}
int main() {
int n;
cin >> n;
int a[100];
for (int i = 0; i < n; i++)
{
cin >> a[i];
}
quicksort(a, 0, n-1);
for (int i = 0; i < n; i++)
{
cout << a[i] << ' ';
}
return 0;
}
- 本文链接:https://brillanza.gitee.io/posts/ef35.html
- 版权声明:本博客所有文章除特别声明外,均默认采用 许可协议。
若您想及时得到回复提醒,建议跳转 GitHub Issues 评论。
若没有本文 Issue,您可以使用 Comment 模版新建。