求条,悬一关
  • 板块灌水区
  • 楼主FireheartQwQ
  • 当前回复29
  • 已保存回复29
  • 发布时间2023/8/29 08:32
  • 上次更新2023/11/3 00:35:42
查看原帖
求条,悬一关
786662
FireheartQwQ楼主2023/8/29 08:32

我想出来了一个排序算法,思路为:

每次遍历数组,找到数组里未被标记过的最大值和最小值,将他们分别放在答案数组的两端,标记这两个数,然后将答案数组的赋值范围缩小,并标记这两个数,循环直到所有书都被标记

代码:

#include<bits/stdc++.h>
using namespace std;
int n,a[100005],b[100005],vis[100005],l,r;
int main() {
	cin>>n;
	for(int i=1; i<=n; i++)cin>>a[i];
	l=1,r=n;
	while(1) {
		int mx=1,mn=1,f=0;
		for(int i=2; i<=n; i++) {
			if(a[mx]<=a[i]&&!vis[i])
            mx=i;
			if(a[mn]>=a[i]&&!vis[i])
            mn=i;
		}
		for(int i=1; i<=n; i++)
        if(!vis[i])
        	f=1;
		if(!f)break;
		vis[mn]=vis[mx]=1;
		b[l]=a[mn],b[r]=a[mx];
		l++,r--;
	}
	for(int i=1;i<=n;i++)
    cout<<b[i]<<" ";
	return 0;
}

这个程序可以完成:

输入:

5

1 2 3 2 1

输出:

1 2 2 3 3

但不可以:

输入:

5

1 4 2 5 3

输出:

1 2 3 1 5

代码或思路求条,悬一关。

2023/8/29 08:32
加载中...