插入式排序
//插入式排序:有插入排序法;谢耳排序法;二叉树排序法 public class 插入式排序 { public static void main(String[] args) { int arr[]={5,4,2,12,6,5}; InsertSort.sort(arr); for(int i=0;i<arr.length;i++){ System.out.print(arr[i]+" "); } } } class InsertSort{ //插入排序法 static void sort(int arr[]){ for(int i=1;i<arr.length;i++){ int insertVal=arr[i]; //insertVal准备和前一个数比较 int index=i-1; while(index>=0&&insertVal<arr[index]){ //把arr[index]向后移动 arr[index+1]=arr[index]; //让index向前移动 index--; } //将insertVal插入到适当位置 arr[index+1]=insertVal; } } }
交换式排序
//内部排序:在内存中完成排序 //外部排序:数据量大,要借助外部进行排序 //交换式排序:有冒泡排序法;快速排序法 public class 交换式排序 { public static void main(String[] args) { int arr[]={1,2,-11,5,4}; //冒泡排序 // int temp=0; // //外层循环:决定运行几次(个数减1次) // for(int i=0;i<arr.length-1;i++){ // //内层循环:逐个比较,如果前一个数比后一个数大,则交换 // //因为每次都会少一个数比较,所以-i // for(int j=0;j<arr.length-1-i;j++){ // //大于号由小到大,小于号由大到小 // if(arr[j]>arr[j+1]){ // temp=arr[j]; // arr[j]=arr[j+1]; // arr[j+1]=temp; // } // } // } //快速排序 Quick.test(0,arr.length-1,arr); for(int i=0;i<arr.length;i++){ System.out.print(arr[i]+" "); } } } class Quick{ //快速排序法:抽一个数,把小的放左边,大的放右边,左右的数以此类推 //速度越快,方法越难 =.=! static void test(int left,int right,int[] array){ int l=left; int r=right; //中间变量 int pivot=array[(left+right)/2]; int temp=0; while(l<r){ while(array[l]<pivot){ l++; } while(array[r]>pivot){ r--; } if(l>=r){ break; } temp=array[l]; array[l]=array[r]; array[r]=temp; if(array[l]==pivot){ --r; } if(array[r]==pivot){ ++l; } } if(l==r){ l++; r--; } if(left<r){ test(left,r,array); } if(right>l){ test(l,right,array); } } }
选择式排序
import java.util.Calendar; //选择式排序:有选择排序法;堆排序法 public class 选择式排序 { public static void main(String[] args) { //int arr[]={18,5,6,12,1,9}; int temp=0; //产生一个1~10000的随机数 int len=100000; int[] arr=new int[len]; for(int i=0;i<len;i++){ //Math.random()会产生一个0~1的数 int t=(int)(Math.random()*10000); arr[i]=t; } //在排序前打印时间,Calendar:日历 Calendar cal=Calendar.getInstance(); System.out.println("排序前:"+cal.getTime()); //选择排序:比冒泡排序快 for(int j=0;j<arr.length-1;j++){ //认为第一个数就是最小 int min=arr[j]; //记录最小数下标 int minIndex=j; for(int k=j+1;k<arr.length;k++){ if(min>arr[k]){ min=arr[k]; minIndex=k; } } //当退出循环,找到最小值 temp=arr[j]; arr[j]=arr[minIndex]; arr[minIndex]=temp; } //Calendar(单态);重新得到时间 cal=Calendar.getInstance(); System.out.println("排序后:"+cal.getTime()); //循环输出,输出耗时大 /*for(int i=0;i<arr.length;i++){ System.out.print(arr[i]+" "); }*/ } }