题目
输入数 n 并输入 n 个数,要求将这 n 个数做排序后输出
归并排序做法
#include <bits/stdc++.h>
using namespace std;
int a[100010];
int n;
void aaa(int,int);
void aaaaa(int,int,int);
int main()
{
cin>>n;
for(int i = 0;i<n;i++)
{
cin>>a[i];
}
aaa(0,n-1);
for(int i = 0;i<n;i++)
{
cout<<a[i]<<" ";
}
return 0;
}
void aaa(int l,int r)
{
if(l==r) return;
//拆
int mid = (l+r)/2;
aaa(l,mid);
aaa(mid+1,r);
//拆完了
//合并
aaaaa(l,mid,r);
}
void aaaaa(int l,int mid,int r)
{
int t[100010];
int lt = l;
int i = l;
int j = mid+1;
while(i<=mid&&j<=r)
{
if(a[i]<a[j]) t[lt++] = a[i++];
else t[lt++] = a[j++];
}
while(i<=mid) t[lt++] = a[i++];
while(j<=r) t[lt++] = a[j++];
for(int i = l;i<=r;i++)
{
a[i] = t[i];
}
}
快速排序做法
#include <bits/stdc++.h>
using namespace std;
int n,a[100010];
void qsp(int,int);
int main()
{
cin>>n;
for(int i = 0;i<n;i++)
{
cin>>a[i];
}
qsp(0,n-1);
for(int i = 0;i<n;i++)
{
cout<<a[i]<<" ";
}
return 0;
}
void qsp(int l,int r)
{
int key = a[(l+r)/2];
int i = l;
int j = r;
while(i<=j)
{
while(a[i]<key) i++;
while(a[j]>key) j--;
if(i<=j)
{
swap(a[i],a[j]);
i++;
j--;
}
}
if(i<r) qsp(i,r);
if(j>l) qsp(l,j);
return;
}

被折叠的 条评论
为什么被折叠?



