要求:从文件fin中读取数据,每行的格式如"王明 85",代表"姓名 成绩",具体有多少行不确定。按成绩从大到小排序,将结果写入文件fout.

/*功能:从文件fin中读取"name grade",并按照grade从大到小排序经验:操作vector也可以像操作普通数组一样操作(使用下标),前提是没有结点的删除或增加
*/
#include <stdio.h>
#include <iostream>
#include <vector>using namespace std;typedef struct
{char name[20];int grade;
}Node;vector<Node>::iterator searchMax(vector<Node> &v)     // 返回vector中grade最大的结点
{vector<Node>::iterator ret = (vector<Node>::iterator)NULL;if(v.size() > 0){ret = v.begin();for(vector<Node>::iterator it = ret + 1; it != v.end(); it++){if(ret->grade < it->grade)ret = it;}}return ret;
}void display(vector<Node> &v)
{for(vector<Node>::iterator it = v.begin(); it != v.end(); it++){printf("%d ", it->grade);}printf("\n");
}void swap(Node * p1, Node *p2)     // 交换两个结点的值
{Node t;t = *p1;*p1 = *p2;*p2 = t;
}void bubbleSort(vector<Node> &v) // vector像使用普通数组一样使用
{int i, j, len;int flag;len = v.size();for(i = 0; i < len; i++){flag = 0;for(j = 0; j < len - i - 1; j++){if(v[j].grade < v[j+1].grade){flag = 1;swap(&v[j], &v[j+1]);  // 交换两结点值}}if(!flag)                        // 本轮未交换过元素值,表明已有序break;display(v);printf("*****************************************\n");}
}void writeVector(FILE *fout, vector<Node> &v)
{for(vector<Node>::iterator it = v.begin(); it != v.end(); it++){fprintf(fout, "%s %d\n", it->name, it->grade);}
}int main(int argc, char **argv)
{char fin[] = "a.txt";char fout[] = "a_out.txt";FILE *fp1, *fp2;vector<Node> v;fp1 = fopen(fin, "r");fp2 = fopen(fout, "w");if(fp1 == NULL || fp2 == NULL){printf("Open file error!\n");return 1;}// 从文件读取数据Node node;while(fscanf(fp1, "%s %d\n", node.name, &node.grade) == 2)v.push_back(node);fclose(fp1);display(v);       // 显示读取的数据// 方法一:调用bubbleSort()printf("----------------------------------------------------\n");   bubbleSort(v);printf("====================================================\n");display(v);writeVector(fp2, v);// 方法二:通过searchMax()
/*  vector<Node>::iterator max = (vector<Node>::iterator)NULL;while(v.size() > 0){max = searchMax(v);if(max == (vector<Node>::iterator)NULL)break;fprintf(fp2, "%s %d\n", max->name, max->grade);v.erase(max);}*/fclose(fp2);return 0;
}

结论:对vector排序,可像操作数组一样方便的操作。前提是没有结点的增、删。

========================================================================

另附:整数数组选择排序算法:

void disp(int a[], int len)
{int i = 0;for(; i < len; i++){printf("%d ", a[i]);}printf("\n");
}void selectSort(int a[], int len)       // 选择排序
{int i, j, k, t;for(i = 0; i < len; i++){k = i;for(j = i+1; j < len; j++){if(a[j] > a[k])k = j;                          // k指向最大值}if(k != i){t = a[i];a[i] = a[k];a[k] = t;}elsecontinue;for(j = 0; j < i; j++)printf("|  ");disp(a+i, len-i);}
}

对vector中的数据排序相关推荐

  1. Java学习案例:字符串中的数据排序

    案例:字符串中的数据排序 需求:有一个字符串:"91 27 46 38 50",请写程序实现最终输出结果是:"27 38 46 50 91" 思路: 1.定义一 ...

  2. C++:利用sort()对vector中的数据自定义排序

    //假如一个文件对应一个坐标,想对文件按照坐标的x或y轴进行排序 //先把这个结构体放进vector中,利用sort()排序struct PathIndexPair {Point2i point; / ...

  3. Echarts之悬浮框中的数据排序

    Echarts非常强大,配置也非常的多,有很多细节需要深入研究.详解一下关于悬浮框中的数据排序问题 悬浮框的数据排序默认是根据series中的数据位置排序的,在我们想自定义排序时,在echarts的配 ...

  4. 怎么样给list中的数据排序

    一.简单数据的排序,如int,Integer类型的数据可以直接使用Collections中的sort()方法: public static void main(String[] args) {    ...

  5. 【100个 Unity实用技能】☀️ | C# 中 Sort() 对List中的数据排序的几种方法 整理总结

    Unity 小科普 老规矩,先介绍一下 Unity 的科普小知识: Unity是 实时3D互动内容创作和运营平台 . 包括游戏开发.美术.建筑.汽车设计.影视在内的所有创作者,借助 Unity 将创意 ...

  6. [天坑]python从文件中读取数据排序_关于os.listdir()乱序问题

    朋友问了我一个问题: 为啥他用了os.listdir后图片顺序不对了... 我很好奇 import osdef deal(path):file_names = os.listdir(path)c = ...

  7. java vector pair_C++ vector中使用pair 及 pair的基本用法总结(转)

    pair的基本用法总结 1.pair的应用 pair是将2个数据组合成一组数据,当需要这样的需求时就可以使用pair,如stl中的map就是将key和value放在一起来保存.另一个应用是,当一个函数 ...

  8. C++:vector中使用.clear()函数

    vector.clear()函数并不会把所有元素清零. vector有两个参数,一个是size,表示当前vector容器内存储的元素个数,一个是capacity,表示当前vector在内存中申请的这片 ...

  9. MySQL中实现分组排序

    这几天在项目开发中需要用SQL实现数据的分组排序,以前在oracle的存储过程开发中用过rank函数可以很方便的实现,但是现在在MySQL中是没有类似的,经过上网搜索资料现将MySQL中的数据排序和分 ...

最新文章

  1. html5毕业作品开场白,毕业典礼主持人开场白
  2. Python 编辑注意点
  3. 科普向--详解JavaScript中的数据类型
  4. SPA (单页应用程序)
  5. c#读蓝牙数据_C#读取BWT901CL蓝牙传感器的数据
  6. 有关容器vector的一些用法
  7. 4个常用的计算机应用软件,信息技术应用--常用计算机工具软件4常用工具软件单元四.pdf...
  8. 导出微信聊天记录并生成词云
  9. 在excel中如何筛选重复数据_高级筛选,让重复的数据记录无处可逃
  10. python编程入门读书笔记1
  11. 带您了解耳机常用麦克风
  12. 电子商务中的数据仓库技术
  13. 30 岁转行做程序员是什么样的体验
  14. 【Cadence】 ADS Dynamic Link使用教程
  15. 【松岩论道】一个道理说明股市人的发展不是靠江湖式的随机跳跃分析!
  16. Cloud Studio
  17. php gb18030 utf-8,GB18030和UTF-8有啥区别
  18. 自主招生考了啥?从传统文化到人工智能
  19. python-docx保留格式替换其中的文字
  20. Win7旗舰版oracle10g安装

热门文章

  1. 【转】C# split 几种使用方法
  2. leetcode214. 最短回文串(kmp)
  3. leetcode994. 腐烂的橘子(bfs)
  4. phpstorm 调试_PhpStorm中的多用户调试
  5. (Python的)__ name__中包含什么?
  6. iref streams_如何利用Neo4j Streams并建立即时数据仓库
  7. ios集成firebase_如何使用Firebase将Google Login集成到Ionic应用程序中
  8. android引入开源库_为好目录引入开源:通过代码帮助公益组织
  9. 015_ICMP专项研究监控
  10. python心得-基本概念2