鱼C论坛

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

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

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

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

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

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

使用道具 举报

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

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

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

  17. int main() {
  18.     std::vector<size_t> id = {9, 1, 2, 8, 6, 4, 7, 3, 5};
  19.     std::vector<size_t> val = {9, 1, 2, 8, 6, 4, 7, 3, 5};
  20.     sort(id, val);
  21.     std::cout << id << std::endl;
  22.     std::cout << val << std::endl;
  23.     return 0;
  24. }
复制代码

  1. #include <iostream>
  2. #include <vector>
  3. #include <utility>

  4. void sort(std::vector<size_t> &id, std::vector<size_t> &val) {
  5.     if(id.size() != val.size()) return;
  6.     for(size_t i = 0; i < id.size(); ++i) {
  7.         for(size_t j = i + 1; j < id.size(); ++j) {
  8.             if(val[i] > val[j]) {
  9.                 std::swap(id[i], id[j]);
  10.                 std::swap(val[i], val[j]);
  11.             }
  12.         }
  13.     }
  14. }

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

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

使用道具 举报

发表于 2021-8-29 13:09:32 | 显示全部楼层
  1. #include<iostream>
  2. #include<vector>
  3. using namespace std ;
  4. int main()
  5. {
  6.     vector<string> num(10) ;      //大小为10的准考证向量
  7.     vector<int> score(10) ;      //大小为10的成绩向量
  8.     int i, j, temp1;
  9.     string temp2;
  10.     for(i=0; i<num.size(); i++)//对向量进行输入
  11.     {
  12.         cin >>num[i] ;
  13.         cin >>score[i] ;
  14.     }
  15.     for(i=0; i<num.size(); i++)    //排序前全部输出
  16.         cout<<num[i]<<":" <<score[i]<<"    ";
  17.     for (i = 0; i < num.size() - 1; i++) //冒泡排序
  18.     {
  19.         for (j = 0; j < num.size() - i -1; j++)
  20.         {
  21.             if (score[j] < score[j + 1]) {
  22.                 temp1 = score[j];
  23.                 score[j] = score[j + 1];
  24.                 score[j + 1] = temp1;
  25.                 temp2 = num[j];
  26.                 num[j] = num[j + 1];
  27.                 num[j + 1] = temp2;
  28.             }
  29.         }
  30.     }
  31.     cout<<endl;
  32.     for(i=0; i<num.size(); i++)    //排序后全部输出
  33.         cout<<num[i]<<":" <<score[i]<<"    ";
  34.     return 0 ;
  35. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> 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 | 显示全部楼层
  1. package main

  2. import "fmt"

  3. type Loli struct {
  4.         Score int
  5.         id string
  6. }

  7. func main() {
  8.         var loli = []Loli {{90, "090"}, {95, "095"}, {87, "087"}, {60, "060"}}
  9.         loli = append(loli, Loli {77, "077"})
  10.         for i := 0; i < len(loli); i++ {
  11.                 for j := 0; j < len(loli) - 1 - i; j++ {
  12.                         tmp := loli[j]
  13.                         if loli[j].Score < loli[j + 1].Score {
  14.                                 loli[j] = loli[j + 1]
  15.                                 loli[j + 1] = tmp
  16.                         }
  17.                 }
  18.         }
  19.         fmt.Println("--------------------")
  20.         fmt.Printf("成绩\t\t准考证\n")
  21.         fmt.Println("--------------------")
  22.         for i := 0; i < len(loli); i ++ {
  23.                 fmt.Printf("%d\t\t%s\n", loli[i].Score, loli[i].id)
  24.         }
  25. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

  4. //不知道为什么你要强行要求两个vector,所以我还是用的两个vector,
  5. //因为成绩你没说有没有小数,所以我就用int了
  6. //排序
  7. bool SortMax(vector<int>& ID ,vector<int>&  Score)
  8. {
  9.         int IDlen = ID.size();
  10.         int Sclen = Score.size();
  11.         //简单排查一下
  12.         if (IDlen == 0 || Sclen == 0 || Sclen != IDlen)
  13.                 return false;
  14.         for (size_t j = 0; j < Sclen - 1; j++)
  15.         {
  16.                 for (size_t i = j+1; i < Sclen; i++)
  17.                 {
  18.                         if (Score[j] < Score[i])
  19.                         {
  20.                                 Score[i] ^= Score[j] ^= Score[i] ^= Score[j];
  21.                                 ID[i] ^= ID[j] ^= ID[i] ^= ID[j];
  22.                         }
  23.                         else if (Score[j] == Score[i])
  24.                         {
  25.                                 if (ID[j] > ID[i]) //因为你没说分数相等要怎么办,所以我处理了一下,ID小的放前面
  26.                                 {
  27.                                         ID[i] ^= ID[j] ^= ID[i] ^= ID[j];
  28.                                 }
  29.                         }
  30.                 }
  31.         }

  32.         return true;
  33. }
复制代码


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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 04:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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