您的位置:首页 > 其它

新手笔记-简单的排序练习

2014-10-16 19:06 176 查看
根据分数排序和名字字母排序

#include <string.h>
#include <stdio.h>
struct person{
char *name;
int score;
};

int init(struct person *p, char *name, int score)
{
p->name = name;
p->score = score;
}

int find_max(struct person *p)
{
int i, j;
int max = p->score;
for(i=0; i<6; i++)
{
if((p+i)->score > max)
max = (p+i)->score;
}

return max;
}

int sort(struct person *p)
{
int i=0, j=0, max=0, maxi=0, k=0;
char *arr;
for(i=0; i<6; i++)
{
maxi=i;
max = (p+i)->score;
for(j=i+1; j<6; j++)
{
if((p+j)->score > max)
{
max = (p+j)->score;
maxi = j;
}
}
arr = (p+i)->name;
(p+i)->name = (p+maxi)->name;
(p+maxi)->name = arr;

k = (p+i)->score;
(p+i)->score = (p+maxi)->score;
(p+maxi)->score = k;

printf("sss is %d \n", (p+i)->score);
}

}

int sort1(struct person *p)
{
int i, j, k, m;
char *arr;

for(i=0; i<6; i++)
{
for(j=i+1; j<6; j++)
{
m = strcmp((p+i)->name , (p+j)->name);
if(m > 0)
{
arr = (p+i)->name;
(p+i)->name = (p+j)->name;
(p+j)->name = arr;

k = (p+i)->score;
(p+i)->score = (p+j)->score;
(p+j)->score = k;
}
}


结果:

sss is 98
sss is 88
sss is 79
sss is 67
sss is 65
sss is 60
tom , 98
jams , 88
jim , 79
lucy , 67
tubi , 65
suoluo , 60
jams , 88
jim , 79
lucy , 67
suoluo , 60
tom , 98
tubi , 65
avg is 76
max is 98


这里分数用的是选择排序,字母用的是冒泡排序

注意:使用选择排序时 maxi 要赋值为当前 i ,每次要从下一次开始,对算法要多思考多练习。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: