查找和排序
题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩
都按先录入排列在前的规则处理。
例示:
jack 70
peter 96
Tom 70
smith 67
从高到低 成绩
peter 96
jack 70
Tom 70
smith 67
从低到高
smith 67
Tom 70
jack 70
peter 96
输入多行,先输入要排序的人的个数,然后分别输入他们的名字和成绩,以一个空格隔开
按照指定方式输出名字和成绩,名字和成绩之间以一个空格隔开
3 0 fang 90 yang 50 ning 70
fang 90 ning 70 yang 50
我的实现:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Item{
char name[20];
int score;
};
int main(void){
int count;
int sort;
while(scanf("%d%d",&count,&sort)!=EOF){
struct Item *students,*stu_copy;
int i,j;
students=(struct Item *)malloc(sizeof(struct Item)*count);
stu_copy=students;
memset(students,0,sizeof(struct Item)*count);
for(i=0;i<count;++i)
scanf("%s%d",students[i].name,&students[i].score);
/*** 插入排序 ***/
for(i=1;i<count;++i){
struct Item student=students[i];
int flag=1;
for(j=i-1;j>=0&&flag;--j){
if(sort==0)
flag=students[j].score<student.score;
else
flag=students[j].score>student.score;
if(flag)
students[j+1]=students[j];
}
if(flag&&j<0)
students[j+1]=student;
else
students[j+2]=student;
}
/*** 插入排序 ***/
for(i=0;i<count;++i)
printf("%s %d\n",students[i].name,students[i].score);
free(stu_copy);
}
}
1,动态分配和释放内存
2,插入排序
感想:
1,一两个月没有做在线编程了,生疏了很多,很多简单的东西需要重新拾起来,所以编程这内力必须要坚持练习才行,不可有废!
2,难道是年龄的问题,还是长时间不用脑袋,脑袋生锈了,不知道为什么一个简单的二层循环我苦苦想了一个小时,卡在那里脑袋都变糊状了,最后放弃坚持做了个饭,又回来才理清楚!真是太可怕了!必须趁年轻抓紧啊!脑袋必须常磨砺,不然锈的严重了,有一天想磨回来都难了!
3,即使一个简单的插入排序,有时候在应用时都可能会十分困难!或许是理解不够透彻,那么透彻的理解,源于不断的灵活运用啊!没啥好说的,这就是沉淀,这就是积累,这就是每个人不断追求的能力!
原文:http://www.cnblogs.com/cq-shihao/p/5325508.html