tt000 发表于 2021-8-29 12:06:55

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

已知:
给定两个向量(vector),一个向量里存放多个准考证号(八位准考证号),另一个向量存放对应准考证号学生的成绩
函数要求:
按照成绩把第二个向量中的成绩从大到小排列,然后第一个向量中的准考证号位置同样变化

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

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

人造人 发表于 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.first = id; temp.second = val;}
    std::sort(temp.begin(), temp.end(), std::less<std::pair<size_t, size_t>>());
    for(size_t i = 0; i < id.size(); ++i) {id = temp.first; val = temp.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 > val) {
                std::swap(id, id);
                std::swap(val, val);
            }
      }
    }
}

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;
}

sunrise085 发表于 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 ;
      cin >>score ;
    }
    for(i=0; i<num.size(); i++)    //排序前全部输出
      cout<<num<<":" <<score<<"    ";
    for (i = 0; i < num.size() - 1; i++) //冒泡排序
    {
      for (j = 0; j < num.size() - i -1; j++)
      {
            if (score < score) {
                temp1 = score;
                score = score;
                score = temp1;
                temp2 = num;
                num = num;
                num = temp2;
            }
      }
    }
    cout<<endl;
    for(i=0; i<num.size(); i++)    //排序后全部输出
      cout<<num<<":" <<score<<"    ";
    return 0 ;
}

DongGu.. 发表于 2021-9-5 15:45:53

csdn:DongGu.悬赏这么香 直接来找我 回复更快

DongGu.. 发表于 2021-9-5 15:48:27

拿一个结构体的话 会更加方便 不用再写两个交换语句

52loli 发表于 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
                        if loli.Score < loli.Score {
                                loli = loli
                                loli = 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.Score, loli.id)
        }
}

liuxinjordon 发表于 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 < Score)
                        {
                                Score ^= Score ^= Score ^= Score;
                                ID ^= ID ^= ID ^= ID;
                        }
                        else if (Score == Score)
                        {
                                if (ID > ID) //因为你没说分数相等要怎么办,所以我处理了一下,ID小的放前面
                                {
                                        ID ^= ID ^= ID ^= ID;
                                }
                        }
                }
        }

        return true;
}


页: [1]
查看完整版本: 想写出一个排序函数不知道怎么写