`
i拾贝
  • 浏览: 30021 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

java引用类型的排序和搜索算法

    博客分类:
  • java
阅读更多

java引用类型的排序和搜索算法

PracticeDate.java

/*
	对引用类型的数组
	采用冒泡法排序
	使用二分法查找指定对象在数组中的位置
*/
public class PracticeDate {
	
	public static void main(String[] args) {
		//引用类型数组
		Date[] days = new Date[5];
		days[0] = new Date(2006, 5, 4);
		days[1] = new Date(2006, 7, 4);
		days[2] = new Date(2008, 5, 4);
		days[3] = new Date(2004, 5, 9);
		days[4] = new Date(2004, 5, 4);
		
		//冒泡排序
		bubbleSort(days);
		
		for(int i=0; i<days.length; i++) {
			//打印对象的引用,相当与直接调用toString(),需要重写toString()
			System.out.println(days[i]);//
		}
		
		//////////////////////////////////
		
		System.out.println("返回值数组里面的位置(下标)");
		Date val = new Date(2004, 5, 9);
		System.out.println(binarySearch(days, val));//在days数组中的位置为1
		
	}
	
	//冒泡排序,返回一个数组的引用
	public static Date[] bubbleSort(Date[] a){
        int len = a.length;
		//从底往上
        for(int i = len-1;i>=1;i--){
			//数组序号从小到大
            for(int j = 0;j<=i-1;j++){
				//比较日期大小
                if(a[j].compare(a[j+1]) > 0){
					//下标值没变,指向的对象改变了
                    Date temp = a[j]; 
                    a[j]=a[j+1];
                    a[j+1]=temp;
                }
            }
        }
        return a;
    }

	//二分法查找
	/*
		Date[] a	查找的数组
		Date num	查找数组中的值
		return		返回值的位置
	*/
	public static int binarySearch(Date[] a, Date num) {
		if (a.length==0) return -1;
		
		int startPos = 0; //起始位置
		int endPos = a.length-1;//结束位置
		int m = (startPos + endPos) / 2;//中间的位置
		
		/*
			起始位置比结束位置小,或等于,执行循环
			起始位置比结束位置大,循环结束
		*/
		while(startPos <= endPos){
			if(num.compare(a[m]) == 0) return m;//找到了返回m
			if(num.compare(a[m]) > 0) {
				startPos = m + 1;//起始位置向右调整
			}
			if(num.compare(a[m]) < 0) {
				endPos = m -1;//结束位置向左调整
			}
			m = (startPos + endPos) / 2;//重新计算中间的位置
		}
		
		return -1;//没有找到返回-1
	}
	
}

//定义日期类
class Date {
	int year, month, day;

	Date(int y, int m, int d) {
		year = y; month = m; day = d;
	}

	//比较日期大小
	public int compare(Date date) {
		return year > date.year ? 1
			   : year < date.year ? -1
			   : month > date.month ? 1
			   : month < date.month ? -1
			   : day > date.day ? 1
			   : day < date.day ? -1 : 0;
	}

	//重写toString()
	public String toString() {
		return "Year:Month:Day -- " + year + "-" + month + "-" + day;
	}
}

 

F:\java>javac PracticeDate.java

F:\java>java PracticeDate
Year:Month:Day -- 2004-5-4
Year:Month:Day -- 2004-5-9
Year:Month:Day -- 2006-5-4
Year:Month:Day -- 2006-7-4
Year:Month:Day -- 2008-5-4
返回值数组里面的位置(下标)
1

F:\java>

 

 

分享到:
评论

相关推荐

    Java数据结构和算法.pdf

    资源摘要信息是关于Java数据结构和算法的知识点总结,涵盖了数组、栈与队列、链表、递归、哈希表、高级排序、二叉树、红黑树、堆、带权图等数据结构和算法概念。 一、数组 * 数组是相同类型变量的集合,可以使用...

    java数据结构与算法.pdf

    - **贪心算法**:解决问题时,每次选择当前最优解,如Prim算法和Dijkstra算法。 - **普里姆算法**:最小生成树算法,用于找到图中边权重之和最小的树结构。 - **迪杰斯特拉算法**:单源最短路径算法,适用于加权...

    JAVA常用数据结构和算法

    在Java中,常见的算法有排序(如冒泡排序、快速排序、归并排序)、查找(如二分查找)、图算法(如深度优先搜索DFS和广度优先搜索BFS)、动态规划、贪心算法等。在描述中提到的非递归文件遍历,就是一种典型的算法...

    java策略模式(排序算法)

    在这个实例中,我们将探讨如何使用策略模式来实现不同的排序算法,如冒泡排序、插入排序和选择排序。 **策略接口定义** 首先,我们需要定义一个公共的策略接口,它声明了所有支持的排序算法必须实现的方法。例如,...

    JAVA数据结构和算法+面试题

    - 分析不同排序算法的时间复杂度和空间复杂度。 - 解释栈和队列的区别,给出实际应用的例子。 - 什么是二叉搜索树?如何保持它的平衡? - 如何使用哈希表实现一个高效的查找功能? - 请解释动态规划和回溯法,给出...

    Java数据结构和算法中文第二版_Java数据结构_

    书中会介绍贪心策略在最小生成树(Prim算法和Kruskal算法)和最小花费路径问题中的应用。 11. **回溯和分支限界**:这类算法用于在大型搜索空间中寻找解决方案,例如八皇后问题、N皇后问题等。 12. **排序算法的...

    java版数据结构和算法

    算法方面,常见的有排序算法(冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序)、搜索算法(深度优先搜索DFS、广度优先搜索BFS、二分查找)、图算法(最短路径算法Dijkstra、Floyd-Warshall、Prim最小...

    Java数据结构和算法

    理解每种排序算法的工作原理、时间复杂度和适用场景,有助于在实际问题中选择最佳解决方案。 9. **查找算法**:二分查找、哈希查找等,它们提供了高效的查找策略。二分查找适用于有序数组,哈希查找则依赖于良好的...

    Java面试常用数据结构与算法

    熟悉这些数据结构和算法,并能灵活应用,对于Java开发者来说至关重要,尤其在解决实际问题和应对面试时。在实际项目中,合理选择和使用数据结构及算法,能够提高代码的效率和质量,从而提升整体软件性能。因此,不断...

    java数据结构和算法

    在探讨《Java数据结构与算法》这一主题时,我们不仅会深入分析其核心概念,还会通过实例演示如何在Java环境中实现这些数据结构和算法。本文将全面覆盖标题、描述及部分示例内容所提及的关键知识点,并确保内容充实、...

    java基础算法训练

    - 常见的排序算法如冒泡排序、选择排序、插入排序、快速排序、归并排序和堆排序,理解它们的时间复杂度和适用场景。 - 搜索算法如二分查找、深度优先搜索(DFS)和广度优先搜索(BFS)。 6. **动态规划**: - ...

    数据结构与算法代码详解JAVA版

    在Java中,我们可以使用各种算法来解决实际问题,例如排序算法(冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序等)、查找算法(顺序查找、二分查找、哈希查找)以及图论中的最短路径算法(Dijkstra算法...

    3种排序算法(快速、二路归并、插入)java

    这里我们讨论的是三种经典的排序算法:快速排序、二路归并排序和插入排序,它们都是用Java语言实现的。以下是对这三种排序算法的详细介绍: 1. **插入排序(Insertion Sort)**: 插入排序是一种简单直观的排序...

    Java数据结构和算法(第二版)+随书源代码+applet小程序

    12. **图论算法**:如Dijkstra算法和Floyd-Warshall算法用于求解单源最短路径问题,以及Ford-Fulkerson算法和Edmonds-Karp算法用于求解最大流问题。 通过《Java数据结构和算法(第二版)》的学习,配合Applet小程序的...

    数据结构与算法(JAVA语言版)

    了解每种排序算法的时间复杂度和适用场景对优化程序性能至关重要。 10. **查找算法**:二分查找、哈希查找等,都是提高数据检索效率的关键技术。 11. **递归与动态规划**:递归用于解决自相似问题,而动态规划则是...

    java算法大全源码包

    1. 排序算法: - 冒泡排序:基础的交换排序,通过不断比较相邻元素并交换来排序。 - 选择排序:每次找到未排序部分的最小(或最大)元素,放到正确位置。 - 插入排序:将每个元素插入到已排序部分的正确位置。 -...

    A星算法的实现(JAVA)

    A星(A*)算法是一种在图形搜索中广泛使用的路径查找算法,特别是在游戏开发、地图导航和机器人路径规划等领域有着重要应用。它结合了最佳优先搜索(如Dijkstra算法)和启发式搜索策略,旨在找到从起点到目标点的...

    A*算法Java/C++实现

    总的来说,理解和实现A*算法需要对图论、数据结构和搜索算法有深入的理解。在Java和C++中实现A*算法,可以提高我们对这两种语言特性的掌握,同时也为我们提供了一个强大的工具,用于解决游戏路径规划、机器人导航、...

    Java数据结构和算法(超级全面)

    1. 排序算法:如冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序等,用于将数据进行有序排列。 2. 搜索算法:如线性搜索、二分搜索、深度优先搜索(DFS)、广度优先搜索(BFS)等,用于找到数据结构中的...

    数据结构与算法(Java版本)

    排序算法如冒泡排序、选择排序、插入排序、快速排序、归并排序和堆排序,各有优缺点,适用于不同的场景。搜索算法包括线性搜索、二分搜索以及更高级的哈希映射。在Java中,`Arrays.sort()`方法提供了对数组的排序...

Global site tag (gtag.js) - Google Analytics