想写出一个排序函数不知道怎么写
已知:给定两个向量(vector),一个向量里存放多个准考证号(八位准考证号),另一个向量存放对应准考证号学生的成绩
函数要求:
按照成绩把第二个向量中的成绩从大到小排列,然后第一个向量中的准考证号位置同样变化
这个函数的作用就是把向量进行排列,没什么返回值。
如果向量不会的话,数组方法也可以。
谢谢大家 #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;
}
#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 ;
} csdn:DongGu.悬赏这么香 直接来找我 回复更快 拿一个结构体的话 会更加方便 不用再写两个交换语句 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)
}
} #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]