数据结构_快排part1_2021.6.19

本文介绍了快速排序的基本思想和核心操作,它是通过一趟排序将数据分为两部分,并递归地对每一部分进行排序,达到整体有序。代码示例展示了快速排序的实现过程,包括Partition函数的使用。此外,还提到了快速排序在最优和最坏情况下的时间复杂度分别为O(nlogn)和O(n^2)。

数据结构与算法|快速排序整理part1


选题想写了挺多,但最近要期末考试了QAQ,数据结构慌得一批,在不整理就die了。结合本周的实验课,挑选了一个排序看了看《大话数据结构这本书》进行简单整理一部分。ヾ(◍°∇°◍)ノ゙也算是第一次技术性的文档,第一次废话多了一点hhh,慢慢改进⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄

参考书:《大话数据结构》 程杰著

1.啥叫快速排序?

1.1 快速排序背景

我们的数据结构老师曾说过,这一章其他排序可以懵逼,但是这个快速排序必须得会!为啥呢?因为“快”哈哈哈哈哈,主要还是原理简单应用广。曾被列为“20世纪十大算法之一”
相对于其他排序:
①希尔排序————直接插入排序pro
②简单选择排序————选择排序pro
快速排序————冒泡排序pro(交换排序)

1.2 快速排序核心

核心的点在于两个词比较交换来实现排序,快速排序主要增加了比较和交换的距离,类似于直接快到位了,而不是轮番移动,从而达到减少次数的功能。

2.快速排序的具体原理

2.1基本思想

基本思想主要为:通过一趟排序将待排的记录分割为独立的两部分,其中的一部分记录的关键字均比另外一部分记录的关键字,可分别两部分继续进行排序,已达到整个序列有序的目的。

2.2代码实现
/*对顺序表L快速排序*/
 void QuickSort(SqList *L){
     QSort(L,1,L->length)
 }


 /*对顺序L中的子序列L->r[low..high]作快速排序*/
 void QSort(SqList *L,int low,int high){
     int pivot;
     if(low<high){
         pivot=Partition(L,low,high); //L->r[low..high]分成两部分
         QSort(L,low,pivot-1);  //高的部分递归排序
         QSort(L,pivot+1,high);  //低的递归排序
     }
 }


 /*交换顺序表L中字标的记录,使pivot的记录到位,返回其所在的位置*/
 /*pivot前不大于它,后不小于它*/
 int Partition(SqList *L,int low,int high){
     int pivotkey;   
     pivotkey=L->r[low];  //第一个是轴
     while(low<high){
         while(low<high&&L->r[high]>=pivotkey)
          high--;
         swap(L,low,high);   //记录小的再低
         while(low<high&&L->r[low]<=pivotkey)
          low++;
         swap(L,low,high)     //记录大的在高
     }
     return low;     //返回枢纽在的位置
 }

3.快速排序复杂度分析

在最优的情况下,快速排序的算法的时间复杂度是O(nlogn);
最坏,为O(n^2).

<think>我们需要将给定的SQL字段列表转换为Java实体类的字段,并添加注释。 转换规则: 1. 字段名采用驼峰命名法:下划线分割,首字母小写,后续每个单词首字母大写(除了第一个单词)。 2. 为每个字段添加注释,注释内容可以基于字段名进行解释,如果有必要可以增加一些说明。 注意:有些字段名可能具有特定的含义,我们需要根据常见术语进行注释。 步骤: 1. 分割字段:每个字段都是“表名.字段名”的形式,我们只取字段名(即点后面的部分)。 2. 转换命名:将字段名转换为驼峰形式。 3. 推断数据类型:根据字段名和上下文,推测合理的数据类型(例如,带有DATE的为日期类型,带有QTY(数量)的可能为整数,WEIGHT可能是BigDecimal等)。 4. 添加注释:为每个字段添加一行注释,说明该字段的含义。 但是,用户要求“带注释”,所以我们在每个字段前用Java注释形式(//)添加。 由于没有提供具体表结构,我们根据字段名推测类型和注释。 示例转换: PART_NO -> private String partNo; // 零件编号 我们将根据常见命名进行转换。 注意:布尔类型字段,如IS_BENDING,我们转换为boolean,并命名为isBending。 开始转换: 字段列表: part_design.PART_NO -> partNo part_design.LENGTH -> length (可能是长度,数值类型) ... 以此类推 数据类型建议: - 编号、材料描述、批号等字符串:String - 数量(QTY):整数,用Integer或int(但考虑可能为null,用Integer) - 重量、厚度等:BigDecimal(避免精度问题) - 布尔值:boolean或Boolean(考虑可能为null,用Boolean) - 日期:Date或者LocalDate(这里先用Date) 我们按照以下格式编写: ```java public class PartDesign { // 零件编号 private String partNo; // 长度 private BigDecimal length; // 零件类型 private String partType; // ... 其他字段 } ``` 注意:有些字段来自不同的表(part_design和part_prod),但用户没有要求分表,我们可以放在一个类中,或者按表拆分?根据用户需求,这里用户要求转成java字段,所以我们放在一个类中,并保留原字段名转换。 根据要求,我们生成一个Java类,包含所有字段,并带注释。 由于字段较多,我们逐字段转换。 开始编写代码: </think>### SQL字段转Java属性注释规范 根据SQL字段命名转换为Java驼峰属性,并添加中文注释说明: ```java public class PartDesign { // ====== 零件设计基础信息 ====== /** 零件编号 */ private String partNo; /** 零件长度(mm) */ private BigDecimal length; /** 零件类型 */ private String partType; /** 材料名称 */ private String material; /** 零件尺寸规格 */ private String partSize; /** 材料描述 */ private String matDesp; /** 材料编号 */ private String matNo; /** 零件重量(kg) */ private BigDecimal weight; /** 是否弯管件 */ private Boolean isBending; /** 坡口数量 */ private Integer grooveQty; /** 是否O型法兰 */ private Boolean isOfe; /** 开槽数量 */ private Integer slotQty; /** 螺钉数量 */ private Integer screwQty; /** 管材厚度(mm) */ private BigDecimal thickness; /** 管道直径(mm) */ private BigDecimal pipeDia; /** 附件等级 */ private String accessoryClass; /** 油漆编号 */ private String paintNo; // ====== 零件生产信息 ====== /** 切割备注说明 */ private String cutRemark; /** 是否在车间标记 */ private Boolean inShopFlag; /** 车间材料订单号 */ private String shopMatOrderNo; /** 热处理批号 */ private String heatNo; /** 生产批次号 */ private String batchNo; /** 质量证书编号 */ private String certNo; } ``` #### 实现规范说明: 1. **注释规范** - 使用`/** Javadoc注释 */`支持IDE文档提示 - 量纲标注:如`(mm)`, `(kg)`等物理单位 - 业务语义补充:如"是否弯管件"、"生产批次号"等 2. **数据类型映射** ```java // 计量字段 → BigDecimal (保证精度) private BigDecimal thickness; // 管材厚度(mm) // 数量字段 → Integer private Integer screwQty; // 螺钉数量 // 状态标记 → Boolean private Boolean isBending; // 是否弯管件 // 编码字段 → String private String batchNo; // 生产批次号 ``` 3. **分组注释策略** - 使用`// ====== 分类标题 ======`划分业务模块 - 按数据来源表分组(设计表/生产表) - 相同业务属性的字段集中声明 4. **Lombok增强方案** ```java @Getter @Setter @ToString @FieldNameConstants // 生成字段常量 public class PartDesign { @ApiModelProperty("零件编号") private String partNo; @ApiModelProperty(value = "长度", notes = "单位:毫米") private BigDecimal length; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值