对日期排序及用二分法查找
2016-11-19 17:11
204 查看
public class TestSort { public static void main(String[] args) { Date[] date = new Date[5]; date[0] = new Date(2006,6,7); date[1] = new Date(2004,5,7); date[2] = new Date(2006,6,3); date[3] = new Date(2005,8,7); date[4] = new Date(2009,6,7); Date d = new Date(2004,5,7); compareSort(date); for(int i=0; i<date.length; i++) { System.out.println(date[i]); } System.out.println(checkP(d,date)); } static Date[] compareSort(Date a[]) { boolean flag = true; Date temp; while(flag) { flag = false; for(int i =0; i< a.length-1; i++) { if(a[i].compare(a[i+1]) > 0) { temp = a[i]; a[i] = a[i+1]; a[i+1] = temp; flag = true; } } } return a; } static String checkP(Date d,Date[] date) { int aStart = 0; int aEnd = date.length-1; int halfNum =0; int leftNum=0; int wide = 0; boolean flag = true; if(date[aStart].compare(d)>0||date[aEnd].compare(d)<0) { return "input is out of scope"; } while(flag==true) { halfNum = (aEnd + aStart)/2; leftNum = aEnd - aStart; if(leftNum==1&&date[halfNum].compare(d)!=0) { halfNum = -1; wide = 1; flag = false; } else if(date[halfNum].compare(d)==0) { flag = false; } else if(date[halfNum].compare(d)>0) aEnd = halfNum; else if(date[halfNum].compare(d)<0) aStart = halfNum; } if(wide == 1) return "date is not exsit in scope"; return "位置在:d["+halfNum+ "]"; } } class Date { int year,month,day; Date(int y, int m, int d) { year = y; month = m; day = d; } int compare(Date a) { return year > a.year? 1 : year < a.year? -1 : month > a.month? 1 : month < a.month? -1 : day > a.day? 1 : day < a.day? -1 :0; } public String toString() { return "year-month-day :" + year + "-" + month + "-" + day; } }
更加简洁的写法
public class TestDateSort { 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); Date d = new Date(2006, 8, 4); String str = String.valueOf(d); //str = d.toString(); bubbleSort(days); for(int i=0; i<days.length; i++) { System.out.println(days[i]); } System.out.println(binarySearch(days, d)); } 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; } public static int binarySearch(Date[] days, Date d) { if (days.length==0) return -1; int startPos = 0; int endPos = days.length-1; int m = (startPos + endPos) / 2; while(startPos <= endPos){ if(d.compare(days[m]) == 0) return m; if(d.compare(days[m]) > 0) { startPos = m + 1; } if(d.compare(days[m]) < 0) { endPos = m -1; } m = (startPos + endPos) / 2; } return -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; } public String toString() { return "Year:Month:Day -- " + year + "-" + month + "-" + day; } }
相关文章推荐
- 二分法查找、快速排序思想与实现
- 二分法查找和快速排序 二分法是分治算法的一种特殊形式,利用分治策略求解时,所需时间取决于分解后子问题的个数、子问题的规模大小等因素,而二分法,由于其划分的简单和均匀的特点,是查找数据时经常采用的一种有
- java 二分法查找排序,插入排序,折半查找算法
- 排序和二分法查找
- 立此存照(12)[C++]快速排序与二分法查找及C++库函数排序
- 【Java基础】选择排序、冒泡法排序、二分法查找
- 笔试经常遇到的选择排序、冒泡排序和二分法查找
- 七、数组及数组排序、二分法查找
- 冒泡排序、选择排序、快速排序、二分法查找
- C# 二分法查找和排序
- [源码]排序数组二分法(折半)查找
- 黑马程序员--选择排序、冒泡排序、二分法查找
- 数据结构之二分法查找、快速排序思想与实现
- 数组排序 和 二分法查找
- 基本算法简单实现-二分法查找、合并排序、冒泡排序、插入排序、选择排序、快速排序
- 黑马程序员03数组排序与二分法查找
- 对多个日期排序,然后用二分查找法查找相应的日期(SXT)
- Java使用二分法进行查找和排序的示例
- C语言拓展——选择排序、冒泡排序、二分法查找
- 新建日期类,并利用冒泡排序、选择排序、二分法寻找指定日期