1028. List Sorting (25)
阿新 • • 發佈:2018-03-01
AD 第一個 排序 opera tdi clas 重點 思路 編寫
距離PAT考試還有18天最重要的是做透每一題
這一題比較簡單
不過也有學到的東西
一個是sort的第三個參數 可以是 一個函數指針也可以是一個函數對象 代碼來自網絡
// sort algorithm example #include <iostream> // std::cout #include <algorithm> // std::sort #include <vector> // std::vector bool myfunction (int i,int j) { return (i<j); }struct myclass { bool operator() (int i,int j) { return (i<j);} } myobject; int main () { int myints[] = {32,71,12,45,26,80,53,33}; std::vector<int> myvector (myints, myints+8); // 32 71 12 45 26 80 53 33 // using default comparison (operator <): std::sort (myvector.begin(), myvector.begin()+4); //(12 32 45 71)26 80 53 33 // using function as comp std::sort (myvector.begin()+4, myvector.end(), myfunction); // 12 32 45 71(26 33 53 80) // using object as comp std::sort (myvector.begin(), myvector.end(), myobject); //(12 26 32 33 45 53 71 80) // print out content: std::cout << "myvector contains:"; for (std::vector<int>::iterator it=myvector.begin(); it!=myvector.end(); ++it) std::cout << ‘ ‘ << *it; std::cout << ‘\n‘; return 0; }
另一個是strcmp函數 比較兩個c字符串的函數當兩個字符串相等時就返回0第一個較小時(比較ASCII)返回值小於0
思路:
用結構體存儲得到的元素
並用sort函數排序重點是cmp函數的編寫
#include <cstdio> #include <vector> #include <algorithm> #include <cstring> using namespace std; int n,c; struct Re{ int id; char name[10]; int grade; Re(){ id =0; for(int i=0;i<10;i++) name[i]=‘\0‘; grade=0; } }; vector<Re> rv; bool cmp1(Re r1,Re r2) { return r1.id<r2.id; } bool cmp2(Re r1,Re r2) { if(strcmp(r1.name,r2.name) < 0){ return true; } else if(strcmp(r1.name,r2.name) == 0) { return r1.id < r2.id; } return false; } bool cmp3(Re r1,Re r2) { if(r1.grade == r2.grade) { return r1.id < r2.id; } return r1.grade<r2.grade; } int main() { scanf("%d %d",&n,&c); for(int i =0;i<n;i++) { Re re; scanf("%d",&(re.id)); scanf("%s",&(re.name[0])); scanf("%d",&(re.grade)); rv.push_back(re); } switch (c) { case 1: sort(rv.begin(),rv.end(),cmp1); break; case 2: sort(rv.begin(),rv.end(),cmp2); break; case 3: sort(rv.begin(),rv.end(),cmp3); break; } for(int i=0;i<rv.size();i++){ printf("%06d %s %d\n",rv[i].id,rv[i].name,rv[i].grade); } return 0; }
1028. List Sorting (25)