题目在这里:题目
这道题真就和题目一样不讲武德,看一下这个排序算法
#define N 100009
int tmp[N];
void change(int arr[], int begin, int end)
{
if (begin >= end)
return;
int mid = (begin + end) / 2, size = 0;
for (int i = mid + 1; i <= end; ++i)
tmp[++size] = arr[i];
for (int i = begin; i <= mid; ++i)
tmp[++size] = arr[i];
for (int i = 0; i < size; ++i)
arr[i + begin] = tmp[i + 1];
}
void sort(int arr[], int begin, int end)
{
if (begin >= end)
return;
int mid = (begin + end) / 2;
sort(arr, begin, mid);
sort(arr, mid + 1, end);
if (arr[begin] > arr[mid + 1])
change(arr, begin, end);
}
想法极其简单就是最小数要在最大数之后而且需要形成一个凸起或者凹陷,所以做一个简单的构造就行了(不过我的代码运行时间长的离谱),所以找来一个比较简单的构造,代码如下:
#include<stdio.h>
int main(){
int n,i,j;
int a[5500];
scanf("%d",&n);
a[0]=n;
a[n-1]=n-1;
for(i=1;i<n-1;i++){
a[i]=n-i-1;
}
for(i=0;i<n;i++){
printf("%d ",a[i]);
}
return 0;
}