关注
思路:
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;
}
查看原帖
点赞 评论
相关推荐
07-04 16:47
山东理工大学 营销 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 实习生的蛐蛐区 #
55050次浏览 411人参与
# 运营面经 #
115649次浏览 1250人参与
# 你认为小厂实习有用吗? #
20930次浏览 250人参与
# 说说你知道的学历厂 #
39658次浏览 239人参与
# 应届生,你找到工作了吗 #
21386次浏览 152人参与
# 三一重工求职进展汇总 #
13379次浏览 61人参与
# 材料人,你们签了哪个公司 #
7490次浏览 18人参与
# 计算机有哪些岗位值得去? #
17135次浏览 160人参与
# 哪一瞬间觉得自己长大了 #
10085次浏览 228人参与
# 面试尴尬现场 #
32708次浏览 219人参与
# 你找工作的时候用AI吗? #
18955次浏览 232人参与
# 下班后的时间你怎么安排 #
10368次浏览 140人参与
# 烟草笔面经互助 #
17854次浏览 184人参与
# 秋招最大的收获是什么? #
36116次浏览 309人参与
# 社会教会你的第一课 #
36934次浏览 463人参与
# 电网笔面经互助 #
36918次浏览 357人参与
# 硬件应届生薪资是否普遍偏低? #
75431次浏览 520人参与
# lastday知无不言 #
58335次浏览 475人参与
# 你的领导最像哪种动物,为什么? #
14379次浏览 107人参与
# 学历贬值真的很严重吗? #
22443次浏览 163人参与