排序原理:
1.首先设定一个分界值,通过该分界值将数组分成左右两部分;
2.将大于或等于分界值的数据放到到数组右边,小于分界值的数据放到数组的左边。此时左边部分中各元素都小于
或等于分界值,而右边部分中各元素都大于或等于分界值;
FileInputStream("reverse_merge_shell.txt"))); String line=null; while((line=reader.readLine())!=null){ //把每一个数字存入到集合中 list.add(Integer.valueOf(line)); }reader.close(); //把集合转换成数组 Integer[] arr = new Integer[list.size()]; list.toArray(arr); // testMerge(arr);//使用归并排序耗时:1200 testShell(arr);//使用希尔排序耗时:1277 }public static void testMerge(Integer[] arr){ //使用插入排序完成测试 long start = System.currentTimeMillis(); Merge.sort(arr); long end= System.currentTimeMillis(); System.out.println("使用归并排序耗时:"+(end-start)); }public static void testShell(Integer[] arr){ //使用希尔排序完成测试 long start = System.currentTimeMillis(); Shell.sort(arr); long end = System.currentTimeMillis(); System.out.println("使用希尔排序耗时:"+(end-start)); } } 67891011121314151617181920212223242526272829303132333435
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
类名 Quick
构造
方法 Quick():创建Quick对象
成员
方法
1.public static void sort(Comparable[] a):对数组内的元素进行排序
2.private static void sort(Comparable[] a, int lo, int hi):对数组a中从索引lo到索引hi之间的元素
进行排序
3.public static int partition(Comparable[] a,int lo,int hi):对数组a中,从索引 lo到索引 hi之间的元
素进行分组,并返回分组界限对应的索引
4.private static boolean less(Comparable v,Comparable w):判断v是否小于w
5.private static void exch(Comparable[] a,int i,int j):交换a数组中,索引i和索引j处的值
3.然后,左边和右边的数据可以独立排序。对于左侧的数组数据,又可以取一个分界值,将该部分数据分成左右两
部分,同样在左边放置较小值,右边放置较大值。右侧的数组数据也可以做类似处理。
4.重复上述过程,可以看出,这是一个递归定义。通过递归将左侧部分排好序后,再递归排好右侧部分的顺序。当
左侧和右侧两个部分的数据排完序后,整个数组的排序也就完成了。