-
importjava.util.Comparator;
-
importcom.work.qxgl.model.QxglDept;
-
-
-
publicclassQxglDeptCompartorimplementsComparator<QxglDept>{
-
publicintcompare(QxglDepto1,QxglDepto2){
-
returno1.getDeptIntroduce().compareTo(o2.getDeptIntroduce());
- }
- }
-
importjava.util.LinkedList;
-
importjava.util.List;
-
importjava.util.Arrays;
-
importcom.work.qxgl.model.QxglDept;
-
-
-
publicclassSelectTreeTwo{
-
-
-
-
publicstaticList<QxglDept>init(){
-
List<QxglDept>l=newLinkedList<QxglDept>();
-
-
QxglDepttemp=newQxglDept("0","中国",null,0,0);
- l.add(temp);
-
-
temp=newQxglDept("2","山东省","0",1,2);
- l.add(temp);
-
temp=newQxglDept("3","河北省","0",1,3);
- l.add(temp);
-
temp=newQxglDept("1","北京市","0",1,1);
- l.add(temp);
-
-
-
-
-
temp=newQxglDept("11","市辖区","1",2,11);
-
l.add(temp);
-
temp=newQxglDept("12","县","1",2,12);
-
l.add(temp);
-
temp=newQxglDept("21","济南市","2",2,1);
- l.add(temp);
-
temp=newQxglDept("23","潍坊市","2",2,3);
- l.add(temp);
-
temp=newQxglDept("22","青岛市","2",2,2);
- l.add(temp);
-
temp=newQxglDept("32","唐山市","3",2,32);
- l.add(temp);
-
temp=newQxglDept("31","石家庄","3",2,31);
- l.add(temp);
-
-
temp=newQxglDept("112","朝阳区","11",3,112);
- l.add(temp);
-
temp=newQxglDept("111","东城区","11",3,111);
- l.add(temp);
-
temp=newQxglDept("113","西城区","11",3,113);
- l.add(temp);
-
temp=newQxglDept("122","延庆县","12",3,122);
- l.add(temp);
-
temp=newQxglDept("121","密云县","12",3,121);
- l.add(temp);
-
temp=newQxglDept("213","天桥区","21",3,213);
- l.add(temp);
-
temp=newQxglDept("212","市中区","21",3,212);
- l.add(temp);
-
temp=newQxglDept("211","历下区","21",3,211);
- l.add(temp);
-
returnl;
- }
-
-
-
publicstaticvoidmain(String[]args){
-
longstart=System.currentTimeMillis();
-
LinkedList<QxglDept>l=(LinkedList<QxglDept>)SelectTreeTwo.init();
-
intLEN=l.size();
-
System.out.println("目标list大小为:"+LEN);
-
for(inti=0;i<LEN;i++){
- setOrderString(l,l.get(i),i);
- }
- sortList(l);
- printTree(l);
-
System.out.println("总共花费"+(System.currentTimeMillis()-start)+"毫秒");
- }
-
-
-
publicstaticvoidsortList(LinkedList<QxglDept>l){
-
-
QxglDept[]dest=newQxglDept[l.size()];
- dest=(QxglDept[])l.toArray(dest);
-
Arrays.sort(dest,newQxglDeptCompartor());
-
intLEN=l.size();
-
l.clear();
-
for(inti=0;i<LEN;i++){
- l.add(i,dest[i]);
- }
- }
-
-
-
publicstaticintgetParentIndex(LinkedList<QxglDept>l,QxglDeptdept){
-
intLEN=l.size();
-
intresult=-1;
- StringparentId=dept.getDeptParentId();
-
for(inti=0;i<LEN;i++){
-
if(parentId.equals(l.get(i).getId())){
- result=i;
-
break;
-
}else{
-
continue;
- }
- }
-
returnresult;
- }
-
-
-
publicstaticvoidsetOrderString(LinkedList<QxglDept>l,QxglDeptdept,
-
intpos){
-
if(pos==0){
-
dept.setDeptIntroduce(dept.getDeptOrderId()+"");
-
}else{
-
- QxglDeptparentNode=l.get(getParentIndex(l,dept));
-
dept.setDeptIntroduce(parentNode.getDeptIntroduce()+"-"
- +getOrderString(dept.getDeptOrderId()));
- }
- }
-
-
-
publicstaticStringgetOrderString(intorderId){
-
Stringtemp="";
-
intLEN=(orderId+"").length();
-
for(inti=0;i<10-LEN;i++){
-
temp=temp+"0";
- }
- temp=temp+orderId;
-
returntemp;
- }
-
publicstaticvoidprint(List<QxglDept>l){
-
for(inti=0;i<l.size();i++){
- QxglDepttemp=l.get(i);
-
System.out.println(temp.getDeptName()+"||"
- +temp.getDeptIntroduce());
- }
- }
-
-
-
publicstaticvoidprintTree(List<QxglDept>l){
-
for(inti=0;i<l.size();i++){
- QxglDepttemp=l.get(i);
-
if(temp.getDeptLevel()==0)
- System.out.println(l.get(i).getDeptName());
-
else{
-
for(intj=0;j<temp.getDeptLevel()-1;j++){
-
System.out.print(" ");
- }
-
System.out.println("┣"+l.get(i).getDeptName());
- }
- }
- }
- }
需要的pojo:
-
publicclassQxglDeptimplementsSerializable{
-
-
-
privatestaticfinallongserialVersionUID=-1536071285282466850L;
-
-
publicQxglDept(){
- initialize();
- }
-
-
-
publicQxglDept(java.lang.Stringid){
-
this.setId(id);
- initialize();
- }
-
-
-
publicQxglDept(java.lang.Stringid,java.lang.StringdeptName,
-
java.lang.StringdeptParentId,intdeptLevel,
-
intdeptOrderId){
-
this.setId(id);
-
this.setDeptName(deptName);
-
this.setDeptParentId(deptParentId);
-
this.setDeptLevel(deptLevel);
-
this.setDeptOrderId(deptOrderId);
- initialize();
- }
-
protectedvoidinitialize(){
- }
-
privateinthashCode=Integer.MIN_VALUE;
-
-
privatejava.lang.Stringid;
-
-
privatejava.lang.StringdeptName;
-
privatejava.lang.StringdeptParentId;
-
privateintdeptLevel;
-
privatejava.lang.StringdeptIdPath;
-
privatejava.lang.StringdeptFullname;
-
privateintdeptOrderId;
-
-
-
privateStringdeptArea;
-
-
privateStringdeptType;
-
privateStringdeptLinkman;
-
privateStringdeptLinkmanphone;
-
privateStringdeptEmail;
-
privateStringdeptPhone;
-
privateStringdeptFax;
-
privateStringdeptAddress;
-
privateStringdeptPostalcode;
-
privateStringdeptIntroduce;
-
-
-
-
publicStringgetDeptAddress(){
-
returndeptAddress;
- }
-
-
-
publicvoidsetDeptAddress(StringdeptAddress){
-
this.deptAddress=deptAddress;
- }
-
-
-
publicStringgetDeptEmail(){
-
returndeptEmail;
- }
-
-
-
publicvoidsetDeptEmail(StringdeptEmail){
-
this.deptEmail=deptEmail;
- }
-
-
-
publicStringgetDeptFax(){
-
returndeptFax;
- }
-
-
-
publicvoidsetDeptFax(StringdeptFax){
-
this.deptFax=deptFax;
- }
-
-
-
publicStringgetDeptLinkman(){
-
returndeptLinkman;
- }
-
-
-
publicvoidsetDeptLinkman(StringdeptLinkman){
-
this.deptLinkman=deptLinkman;
- }
-
-
-
publicStringgetDeptLinkmanphone(){
-
returndeptLinkmanphone;
- }
-
-
-
publicvoidsetDeptLinkmanphone(StringdeptLinkmanphone){
-
this.deptLinkmanphone=deptLinkmanphone;
- }
-
-
-
publicStringgetDeptPhone(){
-
returndeptPhone;
- }
-
-
-
publicvoidsetDeptPhone(StringdeptPhone){
-
this.deptPhone=deptPhone;
- }
-
-
-
publicStringgetDeptPostalcode(){
-
returndeptPostalcode;
- }
-
-
-
publicvoidsetDeptPostalcode(StringdeptPostalcode){
-
this.deptPostalcode=deptPostalcode;
- }
-
-
-
publicStringgetDeptType(){
-
returndeptType;
- }
-
-
-
publicvoidsetDeptType(StringdeptType){
-
this.deptType=deptType;
- }
-
-
-
publicjava.lang.StringgetId(){
-
returnid;
- }
-
-
-
publicvoidsetId(java.lang.Stringid){
-
this.id=id;
-
this.hashCode=Integer.MIN_VALUE;
- }
-
-
-
publicjava.lang.StringgetDeptName(){
-
returndeptName;
- }
-
-
-
publicvoidsetDeptName(java.lang.StringdeptName){
-
this.deptName=deptName;
- }
-
-
-
publicjava.lang.StringgetDeptParentId(){
-
returndeptParentId;
- }
-
-
-
publicvoidsetDeptParentId(java.lang.StringdeptParentId){
-
this.deptParentId=deptParentId;
- }
-
-
-
publicintgetDeptLevel(){
-
returndeptLevel;
- }
-
-
-
publicvoidsetDeptLevel(intdeptLevel){
-
this.deptLevel=deptLevel;
- }
-
-
-
publicjava.lang.StringgetDeptIdPath(){
-
returndeptIdPath;
- }
-
-
-
publicvoidsetDeptIdPath(java.lang.StringdeptIdPath){
-
this.deptIdPath=deptIdPath;
- }
-
-
-
publicjava.lang.StringgetDeptFullname(){
-
returndeptFullname;
- }
-
-
-
publicvoidsetDeptFullname(java.lang.StringdeptFullname){
-
this.deptFullname=deptFullname;
- }
-
publicbooleanequals(Objectobj){
-
if(null==obj)
-
returnfalse;
-
if(!(objinstanceofQxglDept))
-
returnfalse;
-
else{
- QxglDeptqxglDept=(QxglDept)obj;
-
if(null==this.getId()||null==qxglDept.getId())
-
returnfalse;
-
else
-
return(this.getId().equals(qxglDept.getId()));
- }
- }
-
publicinthashCode(){
-
if(Integer.MIN_VALUE==this.hashCode){
-
if(null==this.getId())
-
returnsuper.hashCode();
-
else{
-
StringhashStr=this.getClass().getName()+":"
-
+this.getId().hashCode();
-
this.hashCode=hashStr.hashCode();
- }
- }
-
returnthis.hashCode;
- }
-
publicStringtoString(){
-
return"QxglDept{dept_id="+id+",dept_name="+deptName
-
+",dept_Parent_Id="+deptParentId+",dept_leve="+deptLevel
-
+",deptIdPath="+deptIdPath+",dept_fullname="
-
+deptFullname+",dept_order_id="+deptOrderId+",deptArea="
-
+deptArea+","+"dept_type="+deptType+"}";
- }
-
-
-
-
-
-
-
-
publicintgetDeptOrderId(){
-
returndeptOrderId;
- }
-
publicvoidsetDeptOrderId(intdeptOrderId){
-
this.deptOrderId=deptOrderId;
- }
-
publicintgetHashCode(){
-
returnhashCode;
- }
-
publicvoidsetHashCode(inthashCode){
-
this.hashCode=hashCode;
- }
-
-
-
publicStringgetDeptArea(){
-
returndeptArea;
- }
-
-
-
publicvoidsetDeptArea(StringdeptArea){
-
this.deptArea=deptArea;
- }
-
-
-
publicStringgetDeptIntroduce(){
-
returndeptIntroduce;
- }
-
-
-
publicvoidsetDeptIntroduce(StringdeptIntroduce){
-
this.deptIntroduce=deptIntroduce;
- }
-
}
目标list大小为:19
中国
┣北京市
┣市辖区
┣东城区
┣朝阳区
┣西城区
┣县
┣密云县
┣延庆县
┣山东省
┣济南市
┣历下区
┣市中区
┣天桥区
┣青岛市
┣潍坊市
┣河北省
┣石家庄
┣唐山市
总共花费15毫秒
分享到:
相关推荐
递归排序法是利用递归函数实现排序的一种方法。最著名的递归排序算法之一是快速排序(Quick Sort)。快速排序的核心思想是分治法:选取一个基准元素,将数组分为小于基准的元素和大于或等于基准的元素两部分,然后对...
快速排序是一种高效的排序算法,由英国计算机科学家C.A.R. Hoare在1960年提出。它的基本思想是分治法,通过一趟排序将待排序的数据分割成独立的两部分,其中一部分的所有数据都比另一部分的所有数据都要小,然后再按...
3. **递归排序**:对基准左边的子数组和右边的子数组分别进行快速排序,这个过程通过递归调用快速排序函数来实现。如果子数组为空,递归结束;否则,重复步骤1和2。 4. **合并结果**:由于排序是就地进行的,不需要...
总的来说,这个资源提供了一个学习和实践堆排序算法的机会,涵盖了递归和非递归两种实现方式,对于理解和掌握堆排序算法有着重要的帮助。在实际应用中,根据具体场景和性能需求,可以选择适合的实现方式。
总的来说,非递归快速排序是一种利用栈来实现的高效排序方法,它通过模拟递归过程,避免了递归调用的开销,适用于处理大规模数据。理解并熟练掌握这种算法,对于提升编程能力尤其是算法设计与分析能力非常有帮助。
快速选择算法是基于快速排序的一种高效选择算法,用于在未排序的数据集合中找到第k小(或第k大)的元素。它由C.A.R. Hoare在1960年提出,是线性时间复杂度的算法,在平均情况下表现优秀。在本主题中,我们将深入探讨...
快速排序是一种高效的排序算法,由英国计算机科学家托尼·霍尔于1960年提出。它采用分治策略来把一个序列分为较小的两个子序列,然后递归地对子序列进行排序,最终合并得到有序序列。快速排序在平均情况下的时间...
递归是一种解决问题的方法,它通过调用自身来解决更小规模的相同问题,直到达到基本情况,从而解决整个问题。在排序算法中,递归常用于实现分治策略,如快速排序、归并排序等。 归并排序(Merge Sort)是基于分治...
递归排序是一种基于递归的排序算法,时间复杂度为O(nlogn)。递归排序的原理是将数组分成两个部分,一部分是已经排好序的,一部分是未排序的。通过递归地将这两个部分排序,直到整个数组都排好序。 代码实现 下面是...
递归是一种解决问题的方法,它解决问题的各个部分,而这些部分又是相同问题的规模较小的实例。在计算求和问题中,递归通常涉及到将总和分为两个部分:一部分是第一个数字,另一部分是剩余数字的总和。递归求和的基线...
归并排序是一种高效的排序算法,基于分治策略。在计算机科学中,分治法是一种将大问题分解成小问题来解决的策略。归并排序利用这一策略,将一个大数组分成两个小数组,分别对它们进行排序,然后将排好序的小数组合并...
递归算法则是一种解决问题的方法,它解决问题的每一个子问题都是原问题的缩小版,直到子问题简单到可以直接求解。在基数排序中,递归通常用于处理每一位的排序,将大数转换为小数的过程。 基数排序的基本步骤如下:...
归并排序是一种常用的排序算法,它的基本思想是将需要排序的数组分成两个或多个小数组,分别对每个小数组进行排序,然后将已排序的小数组合并成一个大的已排序数组。这种算法的时间复杂度为O(n log n)。 二、非递归...
3. 对基准左右两侧的子数组分别进行递归排序。 4. 当子数组只剩一个元素时,排序结束。 在Java中,快速排序可以这样实现: ```java public class QuickSort { public static void quickSort(int[] arr, int low, ...
总的来说,用队列实现非递归排序是一种可行的方法,虽然在某些情况下效率可能不高,但其简单易懂的逻辑和无递归的特点使其在特定场景下具有一定的价值。在设计和优化排序算法时,需要根据数据特性以及对时间和空间...
快速排序是一种非常高效的排序算法,它的基本思想是通过一趟排序将待排记录分隔成独立的两部分,其中一部分的所有记录都比另一部分的所有记录都要小,然后分别对这两部分继续进行排序,以达到整个序列有序的目的。...
Java中,可以使用`java.util.Arrays.sort()`方法,它内部实现了高效的排序算法,对于小数组可能会使用插入排序,大数组则使用了Timsort,一种结合了归并排序和插入排序优点的混合排序算法。 以上就是关于归并排序、...
归并排序算法是基于分治策略的一种高效排序方法,其时间复杂度为O(n log n),空间复杂度为O(n)。该算法适用于大数据量的排序问题,在实际应用中有着广泛的应用场景。通过上述代码的分析,我们可以看到归并排序的具体...
4. 堆排序:堆排序是一种树形选择排序,通过构建最大堆或最小堆来实现排序。它的平均和最坏情况时间复杂度均为O(n log n)。 5. 冒泡排序:冒泡排序是最基础的排序算法之一,通过不断交换相邻的逆序元素,使得大元素...
给定的C++代码实现了全排列的一种递归方法。我们首先对代码进行逐行解读: 1. **包含头文件**:`#include <iostream.h>`。这里使用了较老的标准库文件,现代C++更推荐使用`#include <iostream>`。 2. **宏定义**...