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)**: ...
本实验涉及了四种经典的内部排序算法:希尔排序、快速排序、堆排序和归并排序。 **希尔排序**(Shell Sort)是由希尔提出的,它是一种改进的插入排序。希尔排序的核心思想是将待排序的元素按照一定的间隔分组,对每...
压缩包文件代码是通过Python来实现多种排序算法。这里,将展示几种常见的排序算法:冒泡排序、选择排序和快速排序的实现。 冒泡排序(Bubble Sort) 冒泡排序是一种简单的排序算法,它重复地遍历要排序的数列,一次...
1.可以对任何简单类型和任意对象进行排序 ...3.可以随意增加排序算法和顺序要求,保证其他程序不修改 4.减少程序代码中逻辑上的冗余 5.至少用两种方案编程实现该程序包,并说明两个方案的优缺点 包括实验报告。
包含以下九种排序算法的C代码实现源码:可以自已生成随机数以便测试: 选择(SelectSort)、插入(InsertSort)、冒泡(BubbleSort)、Shell排序(ShellSort)、快速排序(QuickSort)、快速排序的改进算法(QStackSort)、合并...
快速排序,基数排序,插入排序,希尔排序,堆排序,归并排序等算法对数排序的时间进行比较。可以对5000000以内(超大数据量)的随机数(可能存在超大数值)进行排序!!!
本文将详细解析标题和描述中提到的多种排序算法,并探讨每种算法的基本原理、特点以及适用场景。 1. **插入排序**(Insertion Sort):它是一种简单直观的排序算法,通过构建有序序列,对于未排序数据,在已排序...
实验中提到了多种排序算法,例如冒泡排序、选择排序、插入排序、快速排序、归并排序等。这些算法各有优缺点,适用于不同的数据集和场景。理解和掌握这些排序算法有助于优化程序性能,尤其是在处理大量数据时。 接着...
这个"可视化对比十多种排序算法(C#版)源码"项目为开发者提供了一个极好的学习和比较不同排序算法的平台。C#是一种常用的编程语言,尤其在Windows应用程序和游戏开发中广泛应用,因此这个源码对C#开发者来说具有很...
设计一个负责排序的程序包,实现多种排序算法,至少包括插入排序、冒泡排序和快速排序算法。 要求: 1.可以对任何简单类型和任意对象进行排序 2.可以支持升序、降序、字典排序等多种顺序要求 3.可以随意增加排序算法...
标题中的"可视化对比十多种排序算法(C#版)Demo"是指通过图形化界面展示多种排序算法的运行过程,包括但不限于快速排序、归并排序、冒泡排序、插入排序、选择排序等。这种方式不仅能让学习者更好地理解各种排序算法...
多种排序算法的介绍和PPT演示,如 插入排序 快速排序 选择排序 归并排序 基数排序 等
### H2002801006_多种排序算法动态演示软件的设计与开发 #### 背景介绍 随着计算机技术的发展以及数据处理需求的增加,对数据进行高效排序变得尤为重要。排序算法作为数据结构中最基础且重要的组成部分之一,在...