社区
C语言
帖子详情
如何对结构体进行排序
CrazyDogHH3
2005-12-22 10:04:12
小弟我想新建一个动态的指针数组*index[],然后用其对结构体进行排序,请问如何操作呢?~~首先前面那个动态创建的就出了问题了...假设我现在要创建一个个数为n的index数组,然后对结构体按mark排序,希望大家帮帮忙~~
struct students
{
int mark;
char *name;
};
谢谢大家
...全文
251
4
打赏
收藏
如何对结构体进行排序
小弟我想新建一个动态的指针数组*index[],然后用其对结构体进行排序,请问如何操作呢?~~首先前面那个动态创建的就出了问题了...假设我现在要创建一个个数为n的index数组,然后对结构体按mark排序,希望大家帮帮忙~~ struct students { int mark; char *name; }; 谢谢大家
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
CrazyDogHH3
2005-12-22
打赏
举报
回复
谢谢楼上三位大哥,小弟基本上明白了~~谢啦~~~
Mr_Yang
2005-12-22
打赏
举报
回复
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
typedef struct NODE
{
int num;
struct NODE *next;
}NODE;
struct NODE *create(void) // 创建链表
{
int n = 0;
int temp = 0;
struct NODE *head = NULL;
struct NODE *p1 = NULL, *p2 = NULL;
printf("请输入将要创建为链表的数字序列,输入0结束:\n");
while (1)
{
scanf("%d", &temp);
if (0 != temp)
{
p1 = (struct NODE *)malloc(sizeof(struct NODE));
p1->num = temp;
++n;
if (1 == n)
head = p1;
else
{
p2->next = p1;
}
p2 = p1;
}
else
break;
}
if (head != NULL)
p2->next = NULL;
return head;
}
void destory(struct NODE *LinkList) // 释放链表
{
if (LinkList == NULL)
return;
struct NODE *p1 = NULL, *p2 = NULL;
p1 = LinkList;
while(p1 != NULL)
{
p2 = p1->next;
free(p1);
p1 = p2;
}
}
void Reverse(struct NODE *&LinkList) // 求链表的逆序
{
if (LinkList == NULL || LinkList->next == NULL)
return ;
struct NODE *p1 = NULL, *p2 = NULL;
p1 = p2 = LinkList;
LinkList = NULL;
while (p2 != NULL)
{
p2 = p2->next;
p1->next = LinkList;
LinkList = p1;
p1 = p2;
}
}
void InsertSort(NODE *&LinkList) // 对链表插入排序
{
if (LinkList == NULL || LinkList->next == NULL)
return;
NODE *p1 = NULL, *p2 = NULL;
p1 = LinkList;
while (p1->next != NULL)
{
if (p1->next->num < p1->num)
{
NODE *temp = p1->next;
p1->next = temp->next;
if (LinkList->num > temp->num)
{
temp->next = LinkList;
LinkList = temp;
}
else for (p2 = LinkList; p2 != p1; p2=p2->next)
{
if (p2->next->num > temp->num)
{
temp->next = p2->next;
p2->next = temp;
break;
}
}
}
else
p1 = p1->next;
}
}
void SelectSort(NODE *&LinkList) // 对链表进行选择排序
{
if (LinkList == NULL || LinkList->next == NULL)
return;
NODE *p1 = NULL, *p2 = NULL, *pMin = NULL;
p1 = LinkList;
while (p1 != NULL)
{
pMin = p1;
for (p2=p1->next; p2!=NULL; p2=p2->next)
{
if (p2->num < pMin->num)
{
pMin = p2;
}
}
swap(p1->num, pMin->num);
p1 = p1->next;
}
}
void Print(struct NODE *LinkList) // 打印链表
{
struct NODE *p;
p = LinkList;
while (p != NULL)
{
printf("%d\t", p->num);
p = p->next;
}
printf("\n");
}
int main(void)
{
struct NODE *list;
list = create();
Print(list);
InsertSort(list);
Print(list);
Reverse(list);
Print(list);
SelectSort(list);
Print(list);
destory(list);
system("pause");
return 0;
}
仅供参考。
useresu
2005-12-22
打赏
举报
回复
其实最简单的方法是用sort()
vector<students> stu;
bool lessmark(const students& s1,const students& s2)
{
return s1.mark < s2.mark;
}
stu.push_back("name1");
//....
sort(stu.begin(),stu.end(),lessmark);
dx30611
2005-12-22
打赏
举报
回复
student **index=new student*[10];
for(int i=0;i<10;i++)
index[i]=new student;
排序就跟一般的数组排序一样
sort 与qsort 使用方法
结构体
多级排序 适合于acm竞赛
经典的acm排序算法,轻松教你学会sort和qsort的使用方法。一个简单,一个比较繁杂,但是运行速度却相对来说较快。希望对大家有帮助,尤其是acm的同学。sort与qsort对
结构体
多级排序是非常有用的。
结构体
快速排序
对
结构体
中的某个值
进行排序
,用的是排序效率较高的快速排序
C++自定义
结构体
排序实现
C++中自定义
结构体
选择一个键值 调用sort qsort排序
实现的go语言的
结构体
排序
用go语言实现的
结构体
排序,使用go的反射包(reflect),实现
结构体
按指定字段排序,字段类型目前支持int,int64,string,方便扩展任意基本类型,使用直接导入包,然后调用sortStruct(structArr, 'sorft_name', true)
结构体
set的排序.cpp
结构体
set的排序.cpp
C语言
69,371
社区成员
243,080
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章