问题标题: 排序的最优解

0
0
已解决
赵逸凡
赵逸凡
初级启示者
初级启示者

我突然有个思路,就是排序的。

设输入a数组6个数字 32327 29238832 83723788 32327 2 10000000 

可以把第四个数32327删除,然后定义一个c数组,专门存有多少个a数组同样的数,于是去重,只留一个32327,32327的数量增加为2

如果有很多数可以优化数量

数组变成32327 29238832 83723788 2 10000000排序

那能否优化成酷町堂2781的思路,使这些数的单位是1,将数组排序成2 4 5 1 3,这样排序可能比较简便

征求大家我的这种优化排序的方法与实现,以及其他优化排序的部分代码

我不是求2781的代码,勿举报

谢谢

赵逸凡在2018-08-14 12:12:16追加了内容
//简易排序
//输入
//将所有值单位变成1,2781的思路
//如果ai=aj,ai.c++,如果哪两个值一样,去重,统计
//排序
#include<bits/stdc++.h>
using namespace std;
int a[10000]/*得分*/,b[10000]/*糖果*/,c[10000]/*数量*/;
int main()
{
	int n,m,k;
    cin>>n;
    for(int i=0;i<n;i++)cin>>a[i];
    for(int i=1;i<n;i++)
    {
        if(a[i]>a[i-1])
            b[i]=b[i-1]+1;
        else b[i]=1;
    }
    for(int i=n-2;i>=0;i--)
    {
        if(b[i]<=b[i+1]&&a[i]>a[i+1])
            b[i]=b[i+1]+1;
    }
    for(int i=0;i<n-1;i++)
    {
		if(a[i]==a[i+1])c[i]++;	
	}
	for(i=n-1;i>=1;i--)
    {
        for(j=0;j<i;j++)
        {
            if(b[j]>b[j+1])
            {
				swap(b[j],b[j+1]);
				swap(a[j],a[j+1]);
			}
        }
    }
    for(int i=0;i<n;i++)
    {
		while(c[i]--)cout<<a[i]<<" ";
	}
	return 0;
} 

我是这样想的,优化排序

赵逸凡在2018-08-14 12:13:19追加了内容

我不是求2781的做法,拜托。

我是求优化排序


0
已采纳
陆麟瑞
陆麟瑞
资深天翼
资深天翼

这题也可以用图论加拓扑排序的方法做。

0
我要回答