`
郑云飞
  • 浏览: 818339 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

多种排序算法

阅读更多
package a1;

import java.util.Arrays;

public class ComparatorTest
{
	/**
	 * @param args
	 */
	public static void main(String[] args)
	{
		// TODO Auto-generated method stub
	   Book b1=new Book(8,"java");
	   Book b2=new Book(3,"C语言");
	   Friut f1=new Friut(6,"apple");
	   Object [] oo={b1,b2,f1};
	   Arrays.sort(oo, new MyComparator());
	   System.out.println(Arrays.toString(oo));
	}

}
 package a1; import java.util.Comparator; public class Book implements Comparable { private int id; private String name; public int getId() { return id; } @Override public String toString() { // TODO Auto-generated method stub return "编号:"+id+"名字:"+name; } public void setId(int id) { this.id = id; } public Book(int id, String name) { super(); this.id = id; this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public int compareTo(Object o) { // TODO Auto-generated method stub Book b=(Book)o; Integer id=this.id; int result=id.compareTo(b.id); if(result==0) { result=this.name.compareTo(b.name); } return result; } }

 

package a1;

import java.lang.reflect.Method;
import java.util.Comparator;

/**
 * 
 * @author zyf
 *@see 通用比较器 要求:必须有相同的字段
 */
public class MyComparator implements Comparator
{
   
	@Override

	public int compare(Object o1, Object o2)
	{
		//获取类的自描述对象
        Class c1=o1.getClass();
        Class c2=o2.getClass();
        //Field f1,f2;
        Method m1,m2;
        Integer id1=null,id2=null;
        try
		{
        //获取字段的自描述对象
		 //f1=c1.getDeclaredField("id");
		 //f2=c2.getDeclaredField("id");
		 //id1=f1.getInt(o1);
		 //id2=f2.getInt(o2);
		 //返回get方法的描述对象
		 m1=c1.getDeclaredMethod("getId");
		 m2=c2.getDeclaredMethod("getId");
		 id1=(Integer) m1.invoke(o1);
		 id2=(Integer) m2.invoke(o2);
		 //从对象中得到字段值
		 
		} catch (Exception e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 
		
		return id1.compareTo(id2);
	}

	
   

}

 

package a1;
/**算法是一种解决特定问题的一种解决方案
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 int []a ={8,9,5,11,7,13,6};
	static Book[] books={new Book(9,"java"),new Book(5,"C语言"),new Book(13,"Linux"),new Book(6,"Oracle"),new Book(8,"JavaEE")};
    static MyComparator com;
	public static void setCom(MyComparator com)
	{
	   ObjectSort.com=com;
	}
	//交换
	public static void swap(int i,int j)
	{
	 int temp=a[i];
	 a[i]=a[j];
	 a[j]=temp;
	}
	//对象的交换
	public static void obj_swap(int i,int j)
	{
		Book temp=books[i];
		books[i]=books[j];
		books[j]=temp;
	}
	/**
	 * 对象数组的冒泡排序
	 */
	public static void obj_compare()
	{
		for(int i=0;i<books.length;i++)
		{
			for(int j=books.length-1;j>i;j--)
			{
				if(com.compare(books[i],books[j])>0)
				{
					obj_swap(i,j);
				}
			}
		}
		 System.out.println("对象冒泡排序的结果为:"); 
		  System.out.print(Arrays.toString(books));
	}
	/**
	 * 冒泡排序
	 */
	public static void fun()
	{
	      for(int i=0;i<books.length-1;i++)
	      {
	    	  for(int j=i+1;j<books.length;j++)
	    	  {
	    		  if(books[i].compareTo(books[j])>0)
	    		  {
	    		    obj_swap(i,j);
	    		  }
	    	  }
	      }
	  System.out.println("冒泡排序的结果为:"); 
	  System.out.print(Arrays.toString(books));
	}
	/**
	 * 对象数组的选择排序
	 */
	public static void obj_select()
	{
		for(int i=0;i<books.length;i++)
		{
			int min=i;
			for(int j=i+1;j<books.length;j++)
			{
				if(books[min].compareTo(books[j])>0)
				{
					min=j;
				}
			}
			if(min!=i)
			{
				obj_swap(i,min);
			}
		}
		System.out.println("对象数组的选择排序的结果为:"); 
		System.out.print(Arrays.toString(books));
	}
	/**
	 * 对象数组的选择排序
	 */
	public static void select()
	{
		for(int i=0;i<a.length;i++)
		{
			int min=i;
			for(int j=i+1;j<a.length;j++)
			{
				if(a[min]>a[j])
				{
					min=j;
				}
			}
			if(min!=i)
			{
				swap(i,min);
			}
		}
		System.out.println("\n选择排序的结果为:"); 
		System.out.print(Arrays.toString(a));
	}
	/**
	 * 插入排序
	 */
	public static void insert()
	{
		for(int i=1;i<a.length;i++)
		{
			int temp=a[i];
			int in=i;//记录位置
			while(in>0&&a[in-1]>temp)//前面的数字比后面的数字大,比且位置小标>0的时候,需要换位置
			{
				a[in]=a[in-1];//换位置的具体步骤
				in--;//位置小标自减
			}
			a[in]=temp;
		}
	}
	/**
	 * 快速排序
	 * 为部分序列划分排序
	 */
	public static void quick(int begin ,int end)
	{
		if(begin<end)
		{
				int spos=begin;//开始位置
				int epos=end;//结束位置
				int temp=a[spos];//开始位置上的数
				//交换标志
				boolean turn=false;
				while(spos<epos)//开始位置小于结束位置
				{
					if(!turn)
					{
						//从前往后比较
						if(temp>a[epos])
						{
							swap(spos,epos);
							turn=true;
							spos++;
						}
						else
						{
							epos--;
						}
						
					}
					else
					{
					   //从后往前比较
						if(a[spos]>temp)
						{
							swap(spos,epos);
							turn=false;
							epos--;
						}
						else
						{
							spos++;
						}
						
					}
					//排前半部分
					quick(begin,spos-1);
					//排后半部分
					quick(spos+1,end);
				}
				
		}
	}
	/**
	 * 二分查找(折半查找)
	 * @return 
	 * 
	 */
	public static int binarySearch(int key)
	{
		int s=0;//起始位置
		int e=a.length-1;//末尾位置
		int middle=(s+e)/2;//中间位置
		while(s<=e)//如果前面的位置始终小于等于后面的位置
		{
			//判断待查的数字与中间的位置上的数字是否相等
			if(key==a[middle])//相等
			{
				return middle;
			}
			if(key<a[middle])//小于中间的位置
			{
				e=middle-1;//末尾位置换成中间的位置-1
			}
			if(key>a[middle])//大于中间的位置
			{
				s=middle+1;//起始位置换成中间的位置+1
			}
			middle=(s+e)/2;//循环折半
		}
		return -1;//查不到的情况
	}
	
	public static void main(String[] args) 
	{
		//调用对象数组的冒泡排序
		//fun();
		//调用对象数组的选择排序
		//select();
		/************插入排序********************/
		 //insert();
		/***********插入排序*********************/
		/***********快速排序*********************/
		  //quick(0,a.length-1);
		 //System.out.println(Arrays.toString(a));
		/***********快速排序*********************/
		/*****************对象的冒泡排序*********/
	    //MyComparator mcom=new MyComparator();
	    //setCom(mcom);
        //obj_compare();
		/*****************对象的冒泡排序*********/
		/****************对象数组的选择排序**********/
		
		obj_select();
		/****************对象数组的选择排序**********/
   
    

		 /****************二分法查找**********************/
		 //int index=binarySearch(73);
		 //if(index!=-1)
		 //{
		//	 System.out.println("7在位置"+index);
		 
		 //}
		 //else
		// {
		 // System.out.println("查无此处");
		 //}
	}
	/*********************二分法查找*****************/
}

 

分享到:
评论

相关推荐

    多种排序算法的比较

    这里我们将深入探讨“多种排序算法的比较”,尤其是“快速排序”这一标签所涉及的内容。 1. **冒泡排序**:这是一种简单的排序方法,通过重复遍历待排序的列表,比较每对相邻元素并交换位置(如果它们顺序错误)来...

    数据结构--课程设计(多种排序算法 有界面)

    数据结构 课程设计 多种排序算法 有界面 数据结构 课程设计 多种排序算法 有界面 数据结构 课程设计 多种排序算法 有界面 数据结构 课程设计 多种排序算法 有界面 数据结构 课程设计 多种排序算法 有界面

    多种排序算法验证程序

    这个名为“多种排序算法验证程序”的项目旨在实现并比较多种不同的排序算法,以展示它们的效率和适用场景。以下是对该程序及其特点的详细阐述: 1. **排序算法种类**:项目可能包括了经典的排序算法如冒泡排序、...

    一个负责排序的程序包,实现多种排序算法

    设计一个负责排序的程序包,实现多种排序算法,至少包括插入排序、冒泡排序和快速排序算法。 要求: 1.可以对任何简单类型和任意对象进行排序 2.可以支持升序、降序、字典排序等多种顺序要求 3.可以随意增加排序算法...

    多种排序算法的动态演示

    本资源“多种排序算法的动态演示”聚焦于展示不同排序算法的工作原理,通过动态的方式帮助学习者更好地理解和掌握这些算法。 1. **冒泡排序**:是最基础的排序算法之一,通过重复遍历数组,比较相邻元素并交换顺序...

    多种排序算法性能比较

    六种排序算法的c语言实现,可选择排序数据量大小,文件在D盘生成

    多种排序算法集合

    这个名为“多种排序算法集合”的资源包含了一系列常见的排序算法实现,用C++编程语言编写。接下来,我们将深入探讨这些排序算法的工作原理、优缺点以及适用场景。 1. **折半插入排序(Binary Insertion Sort)**: ...

    西南交通数据结构内部排序-多种排序算法的实现.docx

    本实验涉及了四种经典的内部排序算法:希尔排序、快速排序、堆排序和归并排序。 **希尔排序**(Shell Sort)是由希尔提出的,它是一种改进的插入排序。希尔排序的核心思想是将待排序的元素按照一定的间隔分组,对每...

    通过python实现多种排序算法.rar

    压缩包文件代码是通过Python来实现多种排序算法。这里,将展示几种常见的排序算法:冒泡排序、选择排序和快速排序的实现。 冒泡排序(Bubble Sort) 冒泡排序是一种简单的排序算法,它重复地遍历要排序的数列,一次...

    设计一个负责排序的程序包,实现多种排序算法,至少包括插入排序、冒泡排序和快速排序算法。

    1.可以对任何简单类型和任意对象进行排序 ...3.可以随意增加排序算法和顺序要求,保证其他程序不修改 4.减少程序代码中逻辑上的冗余 5.至少用两种方案编程实现该程序包,并说明两个方案的优缺点 包括实验报告。

    多种排序算法C代码实现

    包含以下九种排序算法的C代码实现源码:可以自已生成随机数以便测试: 选择(SelectSort)、插入(InsertSort)、冒泡(BubbleSort)、Shell排序(ShellSort)、快速排序(QuickSort)、快速排序的改进算法(QStackSort)、合并...

    数据结构课程设计多种排序算法时间比较.c

    快速排序,基数排序,插入排序,希尔排序,堆排序,归并排序等算法对数排序的时间进行比较。可以对5000000以内(超大数据量)的随机数(可能存在超大数值)进行排序!!!

    源程序给出了插入排序、选择排序、希尔排序、堆排序、冒泡、双向冒泡、快速排序、归并排序、递归的归并排序、基数排序等多种排序算法,其中有17处需要填空。

    本文将详细解析标题和描述中提到的多种排序算法,并探讨每种算法的基本原理、特点以及适用场景。 1. **插入排序**(Insertion Sort):它是一种简单直观的排序算法,通过构建有序序列,对于未排序数据,在已排序...

    数据库实验 包含九个实验 有多种排序算法 链表的插入删除翻转等

    实验中提到了多种排序算法,例如冒泡排序、选择排序、插入排序、快速排序、归并排序等。这些算法各有优缺点,适用于不同的数据集和场景。理解和掌握这些排序算法有助于优化程序性能,尤其是在处理大量数据时。 接着...

    可视化对比十多种排序算法(C#版)源码

    这个"可视化对比十多种排序算法(C#版)源码"项目为开发者提供了一个极好的学习和比较不同排序算法的平台。C#是一种常用的编程语言,尤其在Windows应用程序和游戏开发中广泛应用,因此这个源码对C#开发者来说具有很...

    Sorter排序类实现

    设计一个负责排序的程序包,实现多种排序算法,至少包括插入排序、冒泡排序和快速排序算法。 要求: 1.可以对任何简单类型和任意对象进行排序 2.可以支持升序、降序、字典排序等多种顺序要求 3.可以随意增加排序算法...

    可视化对比十多种排序算法(C#版)Demo

    标题中的"可视化对比十多种排序算法(C#版)Demo"是指通过图形化界面展示多种排序算法的运行过程,包括但不限于快速排序、归并排序、冒泡排序、插入排序、选择排序等。这种方式不仅能让学习者更好地理解各种排序算法...

    多种排序算法的介绍和PPT演示

    多种排序算法的介绍和PPT演示,如 插入排序 快速排序 选择排序 归并排序 基数排序 等

    H2002801006_多种排序算法动态演示软件的设计与开发.doc

    ### H2002801006_多种排序算法动态演示软件的设计与开发 #### 背景介绍 随着计算机技术的发展以及数据处理需求的增加,对数据进行高效排序变得尤为重要。排序算法作为数据结构中最基础且重要的组成部分之一,在...

Global site tag (gtag.js) - Google Analytics