对象数组的排序算法

部分排序

import java.util.Arrays;
class SStudent
{
	private int num;
	String name;
	public int getNum() 
	{
		return num;
	}
	
	public String toString() 
	{
		// TODO Auto-generated method stub
		return "学号:"+num+"姓名:"+name;
	}
	public SStudent(int num, String name) 
	{
		super();
		this.num = num;
		this.name = name;
	}
	public void setNum(int num) 
	{
		this.num = num;
	}
	public String getName() 
	{
		return name;
	}
	public void setName(String name) 
	{
		this.name = name;
	}
	
}

public class ObjectSort 
{
	//定义一个对象数组
	static SStudent s[]={new SStudent(9,"java"),new SStudent(5,"C语言"),new SStudent(13,"Linux"),new SStudent(6,"Oracle"),new SStudent(8,"JavaEE")};

	/**
	 * 对象数组的冒泡排序
	 */
	public static void fun()
	{
	      for(int i=0;i<s.length-1;i++)
	      {
	    	  for(int j=i+1;j<s.length;j++)
	    	  {
	    		  if(s[i].getNum()>s[j].getNum())
	    		  {
	    		    int temp=s[i].getNum();
	    		    s[i].setNum(s[j].getNum());
	    		    s[j].setNum(temp);
	    		  }
	    	  }
	      }
	  System.out.println("冒泡排序的结果为:"); 
	  System.out.print(Arrays.toString(s));
	}
	/**
	 * 对象数组的选择排序
	 */
	public static void select()
	{
		for(int i=0;i<s.length;i++)
		{
			int min=i;
			for(int j=i+1;j<s.length;j++)
			{
				if(s[min].getNum()>s[j].getNum())
				{
					min=j;
				}
			}
			if(min!=i)
			{
				int temp=s[i].getNum();
				s[i].setNum(s[min].getNum());
				s[min].setNum(temp);
			}
		}
		System.out.println("\n选择排序的结果为:"); 
		System.out.print(Arrays.toString(s));
	}
	public static void main(String[] args) 
	{
		//调用对象数组的冒泡排序
		fun();
		//调用对象数组的选择排序
		select();
	      
	}

}

 对象数组的整体排序

import java.util.Arrays;
class SStudent
{
	private int num;
	String name;
	public int getNum() 
	{
		return num;
	}
	
	public String toString() 
	{
		// TODO Auto-generated method stub
		return "学号:"+num+"姓名:"+name;
	}
	public SStudent(int num, String name) 
	{
		super();
		this.num = num;
		this.name = name;
	}
	public void setNum(int num) 
	{
		this.num = num;
	}
	public String getName() 
	{
		return name;
	}
	public void setName(String name) 
	{
		this.name = name;
	}
	
}

public class ObjectSort 
{
	//定义一个对象数组
	static SStudent s[]={new SStudent(9,"java"),new SStudent(5,"C语言"),new SStudent(13,"Linux"),new SStudent(6,"Oracle"),new SStudent(8,"JavaEE")};

	/**
	 * 对象数组的冒泡排序
	 */
	public static void fun()
	{
	      for(int i=0;i<s.length-1;i++)
	      {
	    	  for(int j=i+1;j<s.length;j++)
	    	  {
	    		  if(s[i].getNum()>s[j].getNum())
	    		  {
	    		    SStudent temp=s[i];
	    		    s[i]=s[j];
	    		    s[j]=temp;
	    		  }
	    	  }
	      }
	  System.out.println("冒泡排序的结果为:"); 
	  System.out.print(Arrays.toString(s));
	}
	/**
	 * 对象数组的选择排序
	 */
	public static void select()
	{
		for(int i=0;i<s.length;i++)
		{
			int min=i;
			for(int j=i+1;j<s.length;j++)
			{
				if(s[min].getNum()>s[j].getNum())
				{
					min=j;
				}
			}
			if(min!=i)
			{
				SStudent temp=s[i];
				s[i]=s[min];
				s[min]=temp;
			}
		}
		System.out.println("\n选择排序的结果为:"); 
		System.out.print(Arrays.toString(s));
	}
	public static void main(String[] args) 
	{
		//调用对象数组的冒泡排序
		fun();
		//调用对象数组的选择排序
		select();
	      
	}

}

 二叉树排序

package hashMap;
/**
 *二插树的排序
 *@author 郑云飞
 *2010年8月14日
 */
public class BinaryTree
{
	private Node root;//根节点
	public void add(Comparable<?>data)
	{
		Node newNode=new Node(data);//实例化节点类
		if(this.root==null)//没有根节点
		{
			this.root=newNode;//第一个节点作为根节点
		}
		else 
		{
			this.root.addNode(newNode);
		}
	}
	
	public void print()
	{
		this.root.printNode();//输出全部的节点
	}
	class Node
	{
		private Comparable data;//保存操作的数据内容
		private Node leftNode;//左子树
		private Node rightNode;//右子树
		public Node(Comparable<?> data)
		{
			this.data=data;
		}
		public void addNode(Node newNode)
		{
			if(newNode.data.compareTo(this.data)<0)//放在左子树
			{
				if(this.leftNode==null)//还没有左子树,可以直接保存在此节点下的左子树
				{
					this.leftNode=newNode;//保存左子树
				}
				else 
				{
					this.leftNode.addNode(newNode);//向下继续判断
				}
			}
			if(newNode.data.compareTo(this.data)>0)//放在右子树
			{
				if(this.rightNode==null)//还没有左子树,可以直接保存在此节点下的右子树
				{
					this.rightNode=newNode;//保存右子树
				}
				else 
				{
					this.rightNode.addNode(newNode);//向下继续判断
				}
			}
			
		}
		public void printNode()//采用中序遍历
		{
			if(this.leftNode!=null)//存在左子树
			{
				this.leftNode.printNode();//继续找到下面的左子树
			}
			System.out.println(this.data);//找到根内容
			if(this.rightNode!=null)//存在右子树
			{
				this.rightNode.printNode();//继续找到下面的右子树
			}
		}
		
	}
	public static void main(String[] args)
	{
		BinaryTree bt=new BinaryTree();
		bt.add(3);
		bt.add(5);
		bt.add(1);
		bt.add(0);
		bt.add(9);
		bt.add(1);
		bt.print();
		
	}
}

 快速排序

package d;
/**
 * 快速排序
 * 后比前 :临<前 交换 e--
 * 			不交换  s++
 * 前比后: 临>后  交换 s++
 *           不交换    e--
* 只有插入排序是稳定的
 */

public class Sort_quick
{
	public static void main(String[] args)
	{
		int []a= {5,8,2,7,9,6,4};
		quick_sort(a,0,a.length-1);
		for(int i=0;i<a.length;i++)
		{
			System.out.print(a[i]+" ");
		}
	}

	private static void quick_sort(int[] a,int begin,int end)
	{
		if(begin<end)
		{
			int spos=begin;
			int epos=end;
			int temp=a[spos];
			boolean turn=false;//交换的标志:turn=flase从前往后比,turn=true从后往前比
			while(spos<epos)
			{
				if(!turn)//从前往后比
				{
					if(temp>a[epos])
					{
						swap(a,spos, epos);
						spos++;
						turn=true;
					}
					else
					{
						epos--;
					}
				}
				else //从后往前比
				{
					if(temp<a[spos])
					{
						swap(a, spos, epos);
						epos--;
						turn=false;
					}
					else 
					{
						spos++;
					}
				}
			}
			quick_sort(a, begin, spos-1);
			quick_sort(a, spos+1, end);
		}
	}

	private static void swap(int[] a, int spos, int epos)
	{
		int t=a[spos];
		a[spos]=a[epos];
		a[epos]=t;
	}
	
}

 用容器实现高级排序算法

package hashMap;
import java.util.ArrayList;
import java.util.List;

class MM
{
	int age;
	String name;
	public  MM(int age,String name)
	{
		this.age=age;
		this.name=name;
		
	}
	public String toString()
	{
		return "姓名:"+name+"年龄:"+age;
	}
}
public class A
{
	private static List<MM> al=new ArrayList<MM>();
	 
	public static void main(String[] args)
	{
		al.add(new MM(52,"zhuang zi"));
		al.add(new MM(32,"xun zi"));
		al.add(new MM(42,"kong zi"));
		al.add(new MM(12,"meng zi"));
		al.add(new MM(22,"lao zi"));
		quick_sort(0,(al.size()-1));
		System.out.println(al);
		if(binary_sort(52)!=-1)
		{
			System.out.println("找到元素所在的下标是:"+binary_sort(52));
			System.out.println("找到元素的值"+al.get(binary_sort(52)));
		}
		else 
		{
			System.out.println("没有找到该元素");
		}
	}
	private static void quick_sort(int begin,int end)
	{
		/*****************对象数组的快速排序*******************/
		
		/**
		 * 快速排序的规则
		 * 从前往后比较:前>临 交换:s++
		 *  				 不交换 e--
		 *  从后往前比较 前<临 交换: e--
		 *                   不交换 s++
		 */
		if(begin<end)
		{
			int spos=begin;//起始坐标
			int epos=end;//结束坐标
			MM temp=al.get(spos);
			boolean turn=false;//定义转换的标志
			while(spos<epos)//前面的坐标小于后面的坐标时 ,一直循环
			{
				if(!turn)//从前往后比较
				{
					if(temp.name.compareTo(al.get(epos).name)>0)
					{
						//交换
						
						swap(spos, epos);
						turn=true;
						spos++;
					}
					else
					{
						epos--;
					}
				}
				else
				{
					if(temp.name.compareTo(al.get(spos).name)<0)
					{
						swap(spos, epos);
						turn=false;
						epos--;
						
					}
					else
					{
						spos++;
					}
				}
				quick_sort(begin,spos-1);
				quick_sort(spos+1,end);
			}
		}
		
	}

	private static void swap(int spos, int epos)
	{
		MM mm=al.get(spos);
		al.set(spos, al.get(epos));
		al.set(epos, mm);
	}
	/**********************************折半查找或二分法查找容器中的元素*********************/
	private static int binary_sort(int index)
	{
		
		int start=0;
		int end=al.size()-1;
		int temp=(start+end)/2;
		while(start<=end)
		{
			if(index>al.get(temp).age)
			{
				start=temp+1;
			}
			if(index<al.get(temp).age)
			{
				end=temp-1;
			}
			else 
			{
				return temp;
			}
			temp=(start+end)/2;
		}
		return -1;
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值