鱼C论坛

 找回密码
 立即注册
查看: 2946|回复: 6

想写出一个排序函数不知道怎么写

[复制链接]
发表于 2021-8-29 12:06:55 | 显示全部楼层 |阅读模式
10鱼币
已知:
给定两个向量(vector),一个向量里存放多个准考证号(八位准考证号),另一个向量存放对应准考证号学生的成绩
函数要求:
按照成绩把第二个向量中的成绩从大到小排列,然后第一个向量中的准考证号位置同样变化

这个函数的作用就是把向量进行排列,没什么返回值。

如果向量不会的话,数组方法也可以。
谢谢大家

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-8-29 12:58:47 | 显示全部楼层
#include <iostream>
#include <vector>
#include <utility>
#include <algorithm>
#include <functional>

void sort(std::vector<size_t> &id, std::vector<size_t> &val) {
    if(id.size() != val.size()) return;
    std::vector<std::pair<size_t, size_t>> temp(id.size());
    for(size_t i = 0; i < id.size(); ++i) {temp[i].first = id[i]; temp[i].second = val[i];}
    std::sort(temp.begin(), temp.end(), std::less<std::pair<size_t, size_t>>());
    for(size_t i = 0; i < id.size(); ++i) {id[i] = temp[i].first; val[i] = temp[i].second;}
}

std::ostream &operator<<(std::ostream &os, const std::vector<size_t> &rhs) {
    for(const auto i: rhs) os << i << ' ';
    return os;
}

int main() {
    std::vector<size_t> id = {9, 1, 2, 8, 6, 4, 7, 3, 5};
    std::vector<size_t> val = {9, 1, 2, 8, 6, 4, 7, 3, 5};
    sort(id, val);
    std::cout << id << std::endl;
    std::cout << val << std::endl;
    return 0;
}
#include <iostream>
#include <vector>
#include <utility>

void sort(std::vector<size_t> &id, std::vector<size_t> &val) {
    if(id.size() != val.size()) return;
    for(size_t i = 0; i < id.size(); ++i) {
        for(size_t j = i + 1; j < id.size(); ++j) {
            if(val[i] > val[j]) {
                std::swap(id[i], id[j]);
                std::swap(val[i], val[j]);
            }
        }
    }
}

std::ostream &operator<<(std::ostream &os, const std::vector<size_t> &rhs) {
    for(const auto i: rhs) os << i << ' ';
    return os;
}

int main() {
    std::vector<size_t> id = {9, 1, 2, 8, 6, 4, 7, 3, 5};
    std::vector<size_t> val = {9, 1, 2, 8, 6, 4, 7, 3, 5};
    sort(id, val);
    std::cout << id << std::endl;
    std::cout << val << std::endl;
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-8-29 13:09:32 | 显示全部楼层
#include<iostream>
#include<vector>
using namespace std ;
int main()
{
    vector<string> num(10) ;      //大小为10的准考证向量
    vector<int> score(10) ;      //大小为10的成绩向量
    int i, j, temp1;
    string temp2;
    for(i=0; i<num.size(); i++)//对向量进行输入
    {
        cin >>num[i] ;
        cin >>score[i] ;
    }
    for(i=0; i<num.size(); i++)    //排序前全部输出
        cout<<num[i]<<":" <<score[i]<<"    ";
    for (i = 0; i < num.size() - 1; i++) //冒泡排序
    {
        for (j = 0; j < num.size() - i -1; j++) 
        {
            if (score[j] < score[j + 1]) {
                temp1 = score[j];
                score[j] = score[j + 1];
                score[j + 1] = temp1;
                temp2 = num[j];
                num[j] = num[j + 1];
                num[j + 1] = temp2;
            }
        }
    }
    cout<<endl;
    for(i=0; i<num.size(); i++)    //排序后全部输出
        cout<<num[i]<<":" <<score[i]<<"    ";
    return 0 ;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-9-5 15:45:53 | 显示全部楼层
csdn:DongGu.  悬赏这么香 直接来找我 回复更快
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-9-5 15:48:27 | 显示全部楼层
拿一个结构体的话 会更加方便 不用再写两个交换语句
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-9-5 21:04:16 | 显示全部楼层
package main

import "fmt"

type Loli struct {
        Score int
        id string
}

func main() {
        var loli = []Loli {{90, "090"}, {95, "095"}, {87, "087"}, {60, "060"}}
        loli = append(loli, Loli {77, "077"})
        for i := 0; i < len(loli); i++ {
                for j := 0; j < len(loli) - 1 - i; j++ {
                        tmp := loli[j]
                        if loli[j].Score < loli[j + 1].Score {
                                loli[j] = loli[j + 1]
                                loli[j + 1] = tmp
                        }
                }
        }
        fmt.Println("--------------------")
        fmt.Printf("成绩\t\t准考证\n")
        fmt.Println("--------------------")
        for i := 0; i < len(loli); i ++ {
                fmt.Printf("%d\t\t%s\n", loli[i].Score, loli[i].id)
        }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-9-7 01:23:24 | 显示全部楼层
#include <vector>
#include <iostream>
using namespace std;

//不知道为什么你要强行要求两个vector,所以我还是用的两个vector,
//因为成绩你没说有没有小数,所以我就用int了
//排序
bool SortMax(vector<int>& ID ,vector<int>&  Score)
{
        int IDlen = ID.size();
        int Sclen = Score.size();
        //简单排查一下
        if (IDlen == 0 || Sclen == 0 || Sclen != IDlen)
                return false;
        for (size_t j = 0; j < Sclen - 1; j++)
        {
                for (size_t i = j+1; i < Sclen; i++)
                {
                        if (Score[j] < Score[i])
                        {
                                Score[i] ^= Score[j] ^= Score[i] ^= Score[j];
                                ID[i] ^= ID[j] ^= ID[i] ^= ID[j];
                        }
                        else if (Score[j] == Score[i])
                        {
                                if (ID[j] > ID[i]) //因为你没说分数相等要怎么办,所以我处理了一下,ID小的放前面
                                {
                                        ID[i] ^= ID[j] ^= ID[i] ^= ID[j];
                                }
                        }
                }
        }

        return true;
}

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-11 01:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表