java单链表上的选择排序_C语言链表中数组实现数据选择排序,升序、降序功能主要难点...

链表排序讲解:

head指针指向链表的头结点,是找到整个链表的唯一依据,如果head指针丢失,整个链表就找不到了。

head存储的是第一个节点的地址,head->next存储的是第二个节点的地址;  任意一个节点p的地址,只能通过它前一个节点的next来求得。

单向链表的选择排序图示: ---->[1]---->[3]---->[2]...---->[n]---->[NULL](原链表)

head   1->next  3->next  2->next   n->next

选择排序(Selection sort)是一种简单直观的排序算法。

首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小元素,然后放到排序序列末尾。以此类推,直到所有元素均排序完毕。

动画演示:http://www.nowamagic.net/librarys/veda/detail/1849

选择排序

定义的结构体

struct student

{

]; //学生学号

]; //学生姓名

struct student *next; //next 指针 指向 struct student 类型的变量

}stu;

里面的变量均为数组

那怎么实现结构体中定义(有)数组变量,链表遍历结构体,按照结构体里面变量来排序呢?

其中对数组比较大小、比较两个字符串的大小来使用的函数是: strcmp()  也就是string compare字符串比较。

对数组之间的赋值函数是 strcpy()  ==="string copy"

升序:

/***************

函数功能:

升序排列出勤学生

返回:指向链表表头的指针

/***************/

struct student *sort_message_order(struct student* head) //升序 按照ID顺序

{

struct student *Back,*pointer; //p指针指向新的节点 back指针指向链表的尾节点

struct student temp; // 定义结构体student别名,typedef也可以定义的结构体别名

Back=head->next;

pointer=head->next; //跳过头结点 指向下一个节点 头结点中没有学生信息

while(Back!=NULL) //如果尾节点不为空 就一直遍历下去

{

while(pointer->next!=NULL) //如果指向新开辟的结点不为空就一直遍历下去

{

pointer=pointer->next; //指向下一个新开辟的结点

) //如果back->ID大于pointer->ID就返回大于0的值;后面大于前面的 往后放

{

strcpy(temp.ID,Back->ID);

strcpy(temp.name,Back->name); //把尾节点值赋值给临时temp结构体变量

strcpy( Back->ID,pointer->ID);

strcpy(Back->name,pointer->name); //把指向的新节点 跟尾节点交换 位置

strcpy(pointer->ID,temp.ID);

strcpy(pointer->name,temp.name);//将临时temp结构体变量赋值给指向的结构体变量

}

}

Back=Back->next; //指向下一个尾节点

pointer=Back; //指向尾节点

}

return head; //返回头结点

}

降序:

/***************

函数功能:

降序排列出勤学生

返回:指向链表表头的指针

/***************/

struct student * sort_message_Desc(struct student* head)//Descending降序

{

struct student *Back,*pointer; //p总是指向新申请的结点 back总是指向链表的尾节点

struct student temp;

Back=head->next;

pointer=head->next;//跳过头结点,头结点中没有学生信息

while(Back!=NULL)

{

while(pointer->next!=NULL)

{

pointer=pointer->next;

) // back->ID小于pointer->ID返回负数 把最小的 往后放 降序

{

strcpy(temp.ID,Back->ID);

strcpy(temp.name,Back->name); //把尾节点值赋值给临时temp结构体变量

strcpy( Back->ID,pointer->ID);

strcpy(Back->name,pointer->name); //指向的新节点 跟尾节点交换 位置

strcpy(pointer->ID,temp.ID);

strcpy(pointer->name,temp.name); //将临时temp结构体变量赋值给指向的结构体变量

}

}

Back=Back->next; //指向下一个尾节点

pointer=Back; //指向尾节点

}

return head; //返回头结点

}

输出打印链表内容:

void Print_List(struct student *head)

{

struct student* pointer;

pointer=head->next; //跳过无数据的头结点

while(pointer!=NULL)

{

printf(" ",pointer->ID);

printf(" ",pointer->name);

pointer=pointer->next;//指向下一个节点

}

}

【java】实体类中 按照特定的字段 进行升序/降序 排序

背景: 实际页面上  所有的分值都是按照JSON格式存储在一个字符串中 存储在同一个字段中: {"ownPTotal":"10>0","ownO ...

java中的选择排序之降序排列

import java.util.Arrays;//必须加载 class Demo{ public static void main(String []args){ int[] arr={3,54,4 ...

HTML中实现Table表头点击升序/降序排序

题目:如下图,请实现表格信息的排序功能,当点击表头的属性区域,将表格信息进行排序切换功能,即第一次点击为降序排序,再一次点击进行升序排序. 姓名 力量 敏捷 智力 德鲁伊王 17 24 13 月之骑士 ...

sql 中实现打乱数据的排序

sql 中实现打乱数据的排序    order by NEWID()就实现了数据的打乱

js学习篇--数组按升序降序排列

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值