#include<iostream>
#include<cstdlib>
#include<cstdio>
using namespace std;
int a[10010],n;
void qs(int x,int y)
{
int mid = x + (y-x)/2;
int i = x,j = y,key = a[mid];
a[mid] = a[x];
while(i < j)
{
while(i < j && a[j] >= key) j--;
a[i] = a[j];
while(i < j && a[i] < key) i++;
a[j] = a[i];
}
a[i] = key;
if(i-1 > x) qs(x,i-1);
if(i+1 < y) qs(i+1,y);
}
int main()
{
int ans[10010],r = 1,tmp = 0,j,i;
cin>>n;
for(i = 1; i <= n; i++)
cin>>a[i];
qs(1,n);
for(i = 1; i <= n; i++)
{
tmp = a[i];
ans[r++] = a[i];
j = i + 1;
while(a[j] == tmp) j++;
i = j-1;
}
cout<<r-1<<endl;
for(i = 1; i < r; i++)
{
cout<<ans[i]<<" ";
}
return 0;
}
尽管很水,但还是要调试:i = j - 1 而不是 i = j 。要记得循环执行完语句块后还会++ !
尽管可以用sort,看练练快排代码还是不错的
******************************************************************************************仅供吐槽