关注
 思路: 
  1、创建结构体,数据成员:打印编号,在数组中的初始序号,按照打印编号升序排序后的数组编号 
  2、保存初始顺序 
  3、按照打印编号升序排序 
  4、保存排序后顺序关系 
  5、恢复原来顺序关系 
  6、此时输出排序后顺序关系,即使正确结果 
  (注意,排序时相等元素必须交换,建议不要使用算法库里面的排序算法) 
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
typedef struct node
{
	int pri; //打印编号
	int before; //打印序列在数组中的序号
	int after;  //按照打印编号升序排序后,在数组中的序号
}node;
void swap(node &a,node &b)
{
	node temp;
	temp = a;
	a = b;
	b = temp;
}
void insertsort1(vector<node> &vec,int len) //按照打印编号插入排序,一定要注意打印编号相等的处理,相等必须交换
{
	if (len <= 1) return;
	for (int i = 1; i < len; i++)
	{
		for (int j = i; j>0; j--)
		{
			if (vec[j].pri >= vec[j - 1].pri) swap(vec[j],vec[j-1]);
		}
	}
}
void insertsort2(vector<node> &vec, int len)//按照初始数组下标排序,恢复排序前的位置关系
{
	if (len <= 1) return;
	for (int i = 1; i < len; i++)
	{
		for (int j = i; j>0; j--)
		{
			if (vec[j].before < vec[j - 1].before) swap(vec[j], vec[j - 1]);
		}
	}
}
void rintOrder(const int input[], int len, int output[])
{
	if (len<1) return;
	vector<node> data(len);
	for (int i = 0; i<len; i++)   //创建结构体
	{
		data[i].pri = input[i];
		data[i].before = i;
	}
	insertsort1(data,len);      //按照打印编号升序,排序
	for (int i = 0; i<len; i++)  //保存某一打印编号,第几个输出
	{
		data[i].after = i;
	}
	insertsort2(data, len);      //恢复数组初始位置关系
	for (int i = 0; i<len; i++)  //输出数据
	{
		output[i] = data[i].after;
	}
}
int main()
{
	int input[] = { 9, 3, 5,3 };
	int output[4];
	rintOrder(input, 4, output);
	return 0;
}
  查看原帖
  点赞  评论
相关推荐
09-23 13:46
  河南师范大学 算法工程师   点赞 评论 收藏   
分享
  点赞 评论 收藏   
分享
 牛客热帖
更多 
 正在热议
 更多 
 # 中美关系回暖,你会选择出海吗? #
 3809次浏览 86人参与
# 工作后明白的那些道理 #
 20424次浏览 217人参与
# “vivo”个offer #
 35388次浏览 274人参与
# 校招生月薪1W算什么水平 #
 24809次浏览 156人参与
# 硬件人的简历怎么写 #
 311218次浏览 3057人参与
# 华为保温 #
 104732次浏览 398人参与
# 中美关税战对我们有哪些影响 #
 40586次浏览 345人参与
# 我是面试官,请用一句话让我破防 #
 21390次浏览 114人参与
# 第一份工作应该只看薪资吗 #
 191589次浏览 1686人参与
# 机械人,签完三方你在忙什么? #
 65119次浏览 243人参与
# AI时代,哪些岗位最容易被淘汰 #
 2172次浏览 26人参与
# 牛友们,签完三方你在忙什么? #
 119313次浏览 957人参与
# 哪些行业值得去? #
 3940次浏览 45人参与
# 金融财经春招备战日记 #
 38205次浏览 210人参与
# i人适合做什么工作 #
 9333次浏览 85人参与
# 如果秋招能重来,我会____ #
 32820次浏览 270人参与
# 美团开奖 #
 201102次浏览 1065人参与
# 苦尽甘来时,再讲来时路 #
 29060次浏览 416人参与
# 读研or工作,哪个性价比更高? #
 76381次浏览 766人参与
# 华为池子有多大 #
 108827次浏览 750人参与
# 如果上班像打游戏,你最想解锁什么技能 #
 6626次浏览 64人参与

