其实都是借口,是没坚持下去,几种排序及效率比较
2016-12-14 18:27
274 查看
package test; import java.util.Date; public class InsertSort { public static void main(String args[]){ System.out.println(new Date()); int []array=new int[100000]; int []array1=new int[100000]; int []array2=new int[100000]; int []array3=new int[100000]; int []array4=new int[100000]; int []arrtemp=new int[]{13,2,44,23,12,13,25,98,8}; int delta[]=new int[]{10,5,3,1}; for(int i=99999;i>=0;i--){ array[i]=(int)(Math.random()*100000); } array1=array.clone(); array2=array.clone(); array3=array.clone(); array4=array.clone(); int arr[]=directInsertSort(array); int arr1[]=binInsertSort(array1); int arr2[]=shellSort(array2,delta); int arr3[]=bubbleSort(array3); long start=new Date().getTime(); quickSort(array4,0,array4.length-1); long end=new Date().getTime(); System.out.println("快速排序"+(end-start)); System.out.println(new Date()); /** for(int value:arrtemp) System.out.print(" "+value+" "); System.out.println(""); for(int value:arr2) System.out.print(" "+value+" "); System.out.println(""); for(int value:arr3) System.out.print(" "+value+" "); for(int i=100000;i>=99990;i--){ System.out.print(" "+arr1[i-1]+" "); } System.out.println(""); for(int i=100000;i>=99990;i--){ System.out.print(" "+arr2[i-1]+" "); } */ } public static int[] directInsertSort(int []arr){ long start=new Date().getTime(); for(int i=0;i<arr.length;i++){ int temp=arr[i]; for(int j=i-1;j>=0;j--){ if(temp<arr[j]){ arr[j+1]=arr[j]; arr[j]=temp; } } } long end=new Date().getTime(); System.out.println("直接插入排序"+(end-start)); return arr; } public static int[] binInsertSort(int arr[]){ long start=new Date().getTime(); for(int i=0;i<arr.length;i++){ int temp=arr[i]; int lo=0; int hi=i; while(lo<=hi){ int mid=(hi+lo)/2; if(arr[mid]<arr[i]) lo=mid+1; else hi=mid-1; } for(int j=i-1;j>hi;j--) arr[j+1]=arr[j]; arr[hi+1]=temp; } long end=new Date().getTime(); System.out.println("折半插入排序"+(end-start)); return arr; } public static int[] shellSort(int arr[],int delta[]){ //delta为步长 long start=new Date().getTime(); for(int i=0;i<delta.length;i++){ int delta1=delta[i]; for(int j=delta1;j<arr.length;j++){ if(arr[j]<arr[j-delta1]){ int temp=arr[j]; int k=j-delta1; for(;k>=0&&temp<arr[k];k=k-delta1){ arr[k+delta1]=arr[k]; } arr[k+delta1]=temp; } } } long end=new Date().getTime(); System.out.println("希尔排序"+(end-start)); return arr; } public static int[] bubbleSort(int arr[]){ long start=new Date().getTime(); for(int i=0;i<arr.length;i++){ for(int j=0;j<arr.length-i-1;j++){ if(arr[j]>arr[j+1]){ int temp=arr[j+1]; arr[j+1]=arr[j]; arr[j]=temp; } } } long end=new Date().getTime(); System.out.println("冒泡排序"+(end-start)); return arr; } public static void quickSort(int arr[],int left,int right){ if(left<right){ int pivot=arr[left]; int low=left; int high=right; while(low<high){ while(low<high&&arr[high]>=pivot) high--;
arr[low]=arr[high]; while(low<high&&arr[low]<=pivot) low++; arr[high]=arr[low]; } arr[low]=pivot; quickSort(arr,left,low-1); quickSort(arr,low+1,right); } } }
相关文章推荐
- [C#]几种字符串反转方法效率比较
- 几种字符串反转方法效率比较
- 几种C#框架提供的数据结构对以字符串为主键的单值查找的效率比较
- 【转】几种常见的排序算法之比较
- 几种常见的排序算法之比较
- Java几种排序方法比较
- Ruby 数组排序的几种实现与性能比较
- 成功其实很简单,就是强迫自己坚持下去!
- Asp.net 几种分页方法效率比较
- 几种排序算法效率的比较
- 各种排序查询的算法效率比较
- 几种常用排序算法运行效率比较
- 几种排序方法的比较
- 线程同步的几种方法效率比较
- 几种字符串反转方法效率比较
- 几种字符串反转方法效率比较
- 几种排序算法的效率比较
- 几种字符串反转方法效率比较
- 几种常见的排序算法之比较
- 堆排序与快速排序效率比较