数据结构与算法17-表插入排序

表插入排序

随机产生一组数,通过链表进行排序,然后在复制到数组中,提高效率

class Link
{
	public long  ddata;
	public Link next;
	public Link(long dd)
	{
		ddata = dd;
	}
	public void displayLink()
	{
		System.out.println(ddata + " ");
		
	}
}
class SortedList
{
	private Link first;
	public SortedList()
	{
		first = null;
	}
	public SortedList(Link[] linkArr)
	{
		first = null;
		for(int j=0;j<linkArr.length;j++)
		insert(linkArr[j]);
	}
	public boolean Empty()
	{
		return (first == null);
	}
	public void insert(Link k)
	{
		
		Link previous = null;
		Link current = first;
		while(current !=null&&k.ddata>current.ddata)
		{
			previous = current;
			current = current.next;
		}
		if(previous == null)
		
			first = k;
		else
			previous.next =k;
			k.next = current;
		
	}
	public Link remove()
	{
		Link temp = first;
		first = first.next;
		return temp;
	}
	public void displayList()
	{
		System.out.println("link");
		Link currrent = first;
		while(currrent != null)
		{
			currrent.displayLink();
			currrent = currrent.next;
		}
		System.out.println(" ");
	}
}
class ListInsertionApp
{
	public static void main(String[] args)
	{
		int size = 10;
		Link[] linkArray = new Link[size];
		for(int j=0;j<size;j++)
		{
			int n = (int)(java.lang.Math.random()*99);
			Link newLink = new Link(n);
			linkArray[j] = newLink;
		}
		System.out.println("unsorted");
		for(int j=0;j<size;j++)
		{
			System.out.print(linkArray[j].ddata+" ");
			System.out.println(" ");
			SortedList theSortedList = new SortedList(linkArray);
			for(int i=0;i<size;i++)
				linkArray[i] = theSortedList.remove();
			System.out.print("sorted");
			for(int x=0;x<size;x++)
			System.out.print(linkArray[x].ddata+" ");
			System.out.println(" ");
		}
	}
}

双向链表:允许向前遍历也允许向后遍历

缺点:每次插入和删除一个链结点的时候,要出来四个链结点的引用,而不是两个。

一下是插入功能,分为从链表头插入和链表尾插入

class Link
{
	public long ddata;
	public Link next;
	public Link previous;
	public Link(long d)
	{
		ddata = d;
	}
	public void displayLink()
	{
		System.out.println(ddata + " ");
	}
}
class DoublyLinkedList
{
	private Link first;
	private Link last;
	public DoublyLinkedList()
	{
		first = null;
		last = null;
	}
	public boolean isEmpty()
	{
		return first == null;
	}
	public void insertFirst(long dd)
	{
		Link newLink = new Link(dd);
		if(isEmpty())
			last = newLink;
		else
			first.previous = newLink;
		newLink.next = first;
		first = newLink;
		
	}
	public void insertLast(long dd)
	{
		Link newLink = new Link(dd);
		if(isEmpty())
			first = newLink;
		else
		{
			last.next = newLink;
			newLink.previous = last;			
		}
		last = newLink;
	}
}

 

转载于:https://my.oschina.net/u/3829307/blog/1922373

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值