`
小小黑咖啡
  • 浏览: 11337 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

对应Entity写的算法

阅读更多
Entity的配套排序,有直接插入排序,快速排序,冒泡排序,希尔排序,好像没别的排序了。
package com.util;

public class Algorithm {
	//直接插入
	public static Entity[] injectionSort(Entity[] entities) {
		int j;
		int total = entities.length;
		Entity temp;
		for(int i = 1; i<total; i++) {
			for(j = 0; j<i; j++) {
				if(entities[i].compareTo(entities[j]) < 0) {
					temp = entities[j];
					entities[j] = entities[i];
					entities[i] = temp;
				}
			}
		}
		return entities;
	}
	//冒泡
	public static Entity[] bubbleSort(Entity[] entities) {
		int j;
		int total = entities.length;
		Entity temp;
		for(int i = 1; i < total; i++) {
			for( j = total - 1; j >= i ;j--) {
				if(entities[j].compareTo(entities[j-1]) < 0 ) {
					temp = entities[j-1];
					entities[j-1] = entities[j];
					entities[j] = temp;
				}
			}
		}
		
		return entities;
	}
	//快速排序法
	public static Entity[] quickSort(Entity[] entities) {
		Entity temp;
		int total = entities.length;
		if(total == 1) {
			return entities;
		}
		int low = 0;
		int high = total - 1 ;
		int index = low;
		while(low < high) {
			//寻找右面比要比较值大的数
			while(entities[index].compareTo(entities[high]) < 0) {
				high--;
			}
			if(entities[index].compareTo(entities[high]) > 0) {
				temp = entities[index];
				entities[index] = entities[high];
				entities[high] = temp;
				index = high;
			}
			//寻找左面比要比较值小的数
			while(entities[index].compareTo(entities[low]) > 0) {
				low++;
			}
			if(entities[index].compareTo(entities[low]) < 0) {
				temp = entities[index];
				entities[index] = entities[low];
				entities[low] = temp;
				index = low;
			}
		}
		int i;
		if(index == total-1) {
			Entity[] leftEntities = new Entity[total-1];
			for(i = 0; i<total-1; i++) {
				leftEntities[i] = entities[i];
			}
			leftEntities = quickSort(leftEntities);
			
			for(i=0; i<leftEntities.length; i++) {
				entities[i] = leftEntities[i];
			}
			return entities;
		}else if(index == 0) {
			Entity[] rightEntities = new Entity[total-1];
			for(i = 1; i<total; i++) {
				rightEntities[i-1] = entities[i];
			}
			rightEntities = quickSort(rightEntities);
			for(i=0; i<rightEntities.length; i++) {
				entities[index+i+1] = rightEntities[i];
			}
			return entities;
		} else {
			Entity[] leftEntities = new Entity[index];
			i = 0;
			for(; i<index; i++) {
				leftEntities[i] = entities[i];
			}
			Entity[] rightEntities = new Entity[total-index-1];
			for(i = index+1; i<total; i++) {
				rightEntities[i-index-1] = entities[i];
			}
			
			leftEntities = quickSort(leftEntities);
			rightEntities = quickSort(rightEntities);
			
			for(i=0; i<leftEntities.length; i++) {
				entities[i] = leftEntities[i];
			}
			for(i=0; i<rightEntities.length; i++) {
				entities[index+i+1] = rightEntities[i];
			}
			return entities;
		}	
	}
	//shell排序
	public static Entity[] shellSort(Entity[] entities, int d) {
		int total = entities.length; 
		//d为每次的增量
		d = (d+1)/2;
		if(d<3) {
			entities = injectionSort(entities);
			return entities;
		}
		//m为每个小组中的最多元素数量
		int m ;
		if(total%d == 0)m  = total/d;
		else m = total/d+1;
		Entity[] temp = null;
		for(int j = 0; j<d; j++) {
			//n为每个小组中的实际元素数量
			int n = m;
			if((n-1)*d+j >= total)
				n--;
			temp = new Entity[n];
			for(int i = 0; i<n; i++) {
					temp[i] = entities[d*i+j];
			}
			temp = injectionSort(temp);
			for(int i = 0; i<n; i++) {
					entities[d*i+j] = temp[i];
			}
			temp = null;
		}
		entities = shellSort(entities,d);
		return entities;
	}
}

书上怎么教的我就怎么写的,只要是人话,翻译机器语言还是可以的,虽然用了快一天的时间,不过收获不小,不过好像快速排序、希尔排序和书上的差好多,它没我代码那么多,忘了说了,英文丑的可以,知道标准的留言转告下,高手勿喷啊。下面是测试代码
package com.util;


import java.util.Date;


public class TestAlgorithm {

	@Test
	public void testInjectionSort() {
		Entity e1 = new Entity.Builder(4).setC('b').build(); 
		Entity e2 = new Entity.Builder(1).setC('a').build(); 
		Entity e3 = new Entity.Builder(1).setC('c').build(); 
		Entity e4 = new Entity.Builder(3).setC('a').build(); 
		Entity[] entities = {e1,e2,e3,e4};
		for(Entity e : entities ) {
			System.out.println(e);
		}
		entities = Algorithm.injectionSort(entities);	
		System.out.println();
		for(Entity e : entities ) {
			System.out.println(e);
		}
	}
	
	@Test
	public void testBubbleSort() {
		Entity e1 = new Entity.Builder(4).setC('b').build(); 
		Entity e2 = new Entity.Builder(1).setC('a').build(); 
		Entity e3 = new Entity.Builder(1).setC('c').build(); 
		Entity e4 = new Entity.Builder(3).setC('a').build(); 
		Entity[] entities = {e1,e2,e3,e4};
		for(Entity e : entities ) {
			System.out.println(e);
		}
		entities = Algorithm.bubbleSort(entities);	
		System.out.println();
		for(Entity e : entities ) {
			System.out.println(e);
		}
	}
	
	@Test
	public void testQuickSort() {
		Entity e1 = new Entity.Builder(49).setC('b').build(); 
		Entity e2 = new Entity.Builder(38).setC('a').build(); 
		Entity e3 = new Entity.Builder(65).setC('c').build(); 
		Entity e4 = new Entity.Builder(97).setC('a').build(); 
		Entity e5 = new Entity.Builder(76).build();
		Entity e6 = new Entity.Builder(13).build();
		Entity e7 = new Entity.Builder(27).build();
		Entity e8 = new Entity.Builder(49).build();
		Entity[] entities = {e1,e2,e3,e4,e5,e6,e7,e8};
		for(Entity e : entities ) {
			System.out.println(e);
		}
		entities = Algorithm.quickSort(entities);	
		System.out.println();
		for(Entity e : entities ) {
			System.out.println(e);
		}
	}
	@Test
	public void testShellSort() {
		Entity e1 = new Entity.Builder(49).build(); 
		Entity e2 = new Entity.Builder(38).setC('a').build(); 
		Entity e3 = new Entity.Builder(65).setC('c').build(); 
		Entity e4 = new Entity.Builder(97).setC('a').build(); 
		Entity e5 = new Entity.Builder(76).build();
		Entity e6 = new Entity.Builder(13).build();
		Entity e7 = new Entity.Builder(27).build();
		Entity e8 = new Entity.Builder(49).build();
		Entity e9 = new Entity.Builder(55).build();
		Entity e10 = new Entity.Builder(4).build();
		Entity[] entities = {e1,e2,e3,e4,e5,e6,e7,e8,e9,e10};
		for(Entity e : entities ) {
			System.out.println(e);
		}
		entities = Algorithm.shellSort(entities,entities.length);	
		System.out.println();
		for(Entity e : entities ) {
			System.out.println(e);
		}
	}
}
分享到:
评论

相关推荐

    cordic算法的vhdl实现

    每个状态对应着算法的一个阶段,通过状态间的转换,实现算法的完整流程。VHDL代码通常包含实体和架构两部分,实体定义了电路的接口,包括输入和输出信号;架构则描述了电路的行为,即如何处理这些信号。 #### 实体...

    TransE数据集+代码entity2id.txt,relation2id.txt,train.txt

    `entity2id.txt` 文件是TransE模型中的关键组成部分,它通常包含了知识图谱中所有实体及其对应的唯一标识符(ID)。这些ID用于将实体名称转化为数值形式,以便在计算中使用。文件中每一行可能包含一个实体名称和对应...

    WPF+ADO.net Entity Framework 抽奖程序源码

    总的来说,这个项目是一个很好的学习资源,涵盖了WPF界面设计、Entity Framework数据库操作以及基本的算法实现。对于想要提升WPF和Entity Framework技能的开发者来说,这是一个值得研究的案例。

    erd.zip_ERD_trous_trous wavelet_多孔_多孔trous算法

    在标签中,“trous_wavelet”再次强调了trous算法在小波变换中的应用,“多孔”则直接对应多孔trous算法的核心概念。这些标签为理解这个压缩包的内容提供了线索。 压缩包内的文件名“erd.txt”和“www.pudn.com.txt...

    【已看】实验步骤详细--基于语义一致性的集成实体链接算法1

    实体链接(Entity Linking)是自然语言处理中的一个重要任务,其目标是将文本中的实体提及(entity mention)映射到知识库中对应的实体对象。这一过程有助于理解文本内容,提取关键信息,并实现知识图谱的构建与完善...

    Video-Entity-Linking:来自ActivityNet-Entity数据集的知识图

    ActivityNet-Entity数据集是专门为这一任务设计的,它提供了丰富的视频片段和对应的实体信息,为研究者提供了实验和开发的平台。 ActivityNet-Entity数据集是视频理解研究中的一颗璀璨明珠,它结合了ActivityNet的...

    毕设项目:基于springboot+mysql+Dijkstra算法实现物流优化管理系统.zip

    3. **MySQL数据库设计**:数据库设计通常包括模型类(Entity)和对应的Mapper/Repository文件,用于定义物流管理系统的数据结构,如货物信息、车辆信息、路线信息等。 4. **API接口设计**:Spring Boot支持RESTful ...

    CFS调度算法简要介绍,简要介绍了CFS算法。

    1. **调度实体 (sched_entity)**:在CFS中,调度实体是指进程或线程,是调度的基本单位。 2. **虚拟运行时间 (vruntime)**:每个调度实体的虚拟运行时间,用于衡量进程的实际运行情况。它是CFS中衡量公平性的重要...

    cesium实时轨迹、自动变向

    在实际应用中,我们可能只有离散的时间点和对应的坐标,而插值算法(如线性插值或样条插值)能填充这些点之间的空缺,生成平滑的运动路径。Cesium的`Interpolation`模块提供了多种插值算法,可以用于生成平滑的轨迹...

    基于拟合预测算法和SpringBoot框架的电力数据可视化系统的设计与实现.docx

    `PmsystemApplication`作为启动类,`Controller`处理前端请求,`Entity`接收前端数据,`Mapper`对应MyBatis的XML文件处理数据库查询。`Services`层定义服务接口并实现,`Web`处理数据传输,`Resources`存放前端代码...

    2018-FL+实体Resolution-Entity Resolution and Federated Learning ge

    而在这个过程中,一个关键的前置问题就是实体解析(Entity Resolution),即确定不同数据集中的行是否对应于同一个实体。 实体解析是数据整合与清洗过程中的核心步骤,它旨在识别并合并来自不同源的同一实体的记录...

    基于改进BERT算法的专利实体抽取研究—以石墨烯为例.docx

    实体抽取第一步是进行命名实体识别(named entity recognition, NER),目前通用文档中识别,命名实体识别技术已经相对成熟,例如POS-tagging、Named Entity Recognition、Dependency Parsing等。 然而,这些技术存在...

    .net自动排课系统完整源码(适合智慧校园)

    同时,系统应具备良好的数据持久化能力,可以利用Entity Framework等ORM(对象关系映射)工具,方便地进行数据库操作。 为了确保系统的安全性和稳定性,.NET框架提供了身份验证、授权和异常处理机制。通过实施角色...

    Entity Recognition and Linking in Chinese Search Queries

    本文提出在实体识别中采用字典、在线知识库以及西南交通大学中文分词技术,并在实体链接中使用同义词词典、维基百科重定向以及改进的拼音编辑距离(PED)算法和最长公共子序列(LCS)的结合方法。在实体消歧方面,...

    linux内核之CFS调度和组调度汇编.pdf

    在CFS调度中,还引入了调度实体(sched entity)的概念,调度实体是调度的对象。每个进程的task_struct包含了调度实体成员变量se。引入调度实体是为了支持CFS组调度,一个组中可能包含1个或多个进程。 在多核系统中...

    sqlserver 数据库设计模板

    - 使用实体-关系(Entity-Relationship,简称ER)模型来表示实体、属性和它们之间的关系,这是数据库设计的重要阶段,有助于理解数据间的复杂关联。 6. **表设计** - 列出所有涉及的表,定义每个表的名称、字段名...

    A Supervised Multi-Head Self-Attention Network for Nested NE.pdf

    本篇文章介绍了一种针对嵌套命名实体识别(Nested Named Entity Recognition, NER)的监督多头自注意力神经网络模型。命名实体识别是自然语言处理(Natural Language Processing, NLP)中的一个重要任务,旨在识别...

Global site tag (gtag.js) - Google Analytics