当前位置: 首页 > article >正文

成绩排序(练习链表)

(图片别看错了,右边的是输出样例)

前几天学了学链表,也把一些ADT格式敲了敲,但是还是没有实际用过

然后就选了一道排序题,顺便试了试插入排序

以前只知道有插入排序这个东西,但是用数组实现的话感觉效率会偏低,现在知道链表之后就知道该怎么玩了(乐)

代码如下:

#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
typedef struct LNode{
	ElemType data;
    ElemType ID;
	struct LNode * next;
}LinkList;

LinkList * creat(int n)
{
	LinkList * head, * node, * end;//定义头节点,普通节点,尾部节点
	head = (LinkList *)malloc(sizeof(LinkList));//分配地址
	end = head;
	for(int i = 0; i < n; i++)
	{
		node = (LinkList *)malloc(sizeof(LinkList));//分配地址
		scanf("%d%d", &node->ID, &node->data);
		end->next = node;
		end = node;
	}
	end->next = NULL;//结束创建
	return head;
}//创建长度为n的链表
void DestroyList(LinkList * head)
{
	LinkList * end = head;
	do
	{
		end = end->next;
		free(head);
		head = end;
	}while(end != NULL);
	return;
}//销毁链表

int main(void)
{
    int N;
    scanf("%d", &N);
    LinkList * head = creat(1);
    //插入排序
    for(int i = 1; i < N; i++)
    {
        int t_ID, t_data;
        scanf("%d%d", &t_ID, &t_data);
        for(LinkList * node = head->next, * f_node = head; 1; node = node->next, f_node = f_node->next)
        {
            if(node == NULL || t_data > node->data || (t_data == node->data && t_ID < node->ID))
            {
                LinkList * tmp = (LinkList *)malloc(sizeof(LinkList));
                f_node->next = tmp, tmp->next = node;
                tmp->data = t_data, tmp->ID = t_ID;
                break;
            }
        }
    }
    //输出
    int tmp = 1, count = 1;
    for(LinkList * node = head->next, * f_node = head; 1; )
    {
        printf("%d %d %d\n", tmp, node->ID, node->data);
        node = node->next, f_node = f_node->next;
        if(node == NULL)  break;
        else
        {
            count++;
            if(f_node->data > node->data)  tmp = count;
        }
    }
    DestroyList(head);

    return 0;
}

效率还是比较高的(不知道是不是我的错觉),对1000个数据进行排序的时间不超过8ms

一些废话:

昨天晚上上思政课,差点给我干昏过去,整什么课上辩论赛,还要提问,太抽象了,我一个理科生看着马院等等院的大佬在那边讲什么因然,什么实然。能不能对我这种不对哲学有一点点兴趣的绯雾温柔点,md我看算法书都惊心胆颤

辩题是有没有普适(世)性的价值观,在那边咬文嚼字

简单来说不就是证明存在性的问题嘛,那坚持存在的一方举出例子,反方争辩不存在不就行了(doge)

所以说这种东西就是不如高数让我感觉脚踏实地,果然我不是学文科的料


http://www.kler.cn/news/148877.html

相关文章:

  • 《数据结构、算法与应用C++语言描述》-二叉树与其他树-二叉树的C++实现-设置信号放大器与并查集问题
  • Positive Technologies 公司发布了一种保护容器环境的产品 PT Container Security
  • Android 13 - Media框架(14)- OpenMax(四)
  • 开源C++智能语音识别库whisper.cpp开发使用入门
  • Pytest自动化测试框架完美结合Allure
  • 微服务--05--配置管理
  • 大模型训练为什么用A100不用4090
  • Python编写的爬虫为什么受欢迎?
  • 【PHP】MySQL简介与MySQLi函数(含PHP与MySQL交互)
  • Android手电筒、闪光灯、torch、flash
  • CMake中的变量: CTest,CPack,CMake内部定义的变量
  • 封装websocket并在vuejs中调用
  • 动态库与静态库
  • Python与设计模式--设计原则
  • 九、LuaTable(表)
  • Nginx访问控制
  • 力扣142. 环形链表 II
  • 面试问题--智能指针
  • linux网络编程之UDP编程
  • 详细讲解1.js处理日期对象输出标准的“2000年12月22日 周三“ 的格式
  • 杂记 | 使用Docker安装并配置MongoDB以支持事务(单副本,并解决了证书文件错误的问题)
  • centos7.9 + gitlab12.3.0安装
  • PyQt6 QLineEdit单行文本框控件
  • 使用python提取出身份证的出生日期(18位和15位)
  • C# freesql技术 常用的增删改查sql命令
  • linux安装终端连接工具Tabby
  • DjiTello + YoloV5的无人机的抽烟检测
  • 创建Dataloader基础篇【一】
  • 拆解按摩器:有意思的按键与LED控制电路,学习借鉴一下!
  • <Linux>(极简关键、省时省力)《Linux操作系统原理分析之Linux 进程管理 9》(13)