//冒泡排序
冒泡排序
int []arr={45,32,89.17,6}; for (int i = 0,t; i <arr.length-1 ; i++) { for (int j = 0; j <arr.length-1-i ; j++) { if(arr[j]>arr[j+1]){ //若前面的值比后面的大,则交换值 t=arr[j+1]; arr[j+1]=arr[j]; arr[j]=t; } } } for (int i : arr) { System.out.println(i); }// 选择排序
选择排序
int []arr={45,32,89.17,6}; for (int i = 0,MaxIx,MaxValIx,t; i <arr.length-1 ; i++) { MaxValIx=0; //假定第一位数是最大值 MaxIx=arr.length-1-i; //最大值所在位置 for (int j = 1; j <=MaxIx ; j++) { if(arr[j]>arr[MaxValIx]){ MaxValIx=j;//若后面的值比假定的第一位数最大值大,则交换最大值的下标,直到一轮比完找出最大值 } } if (MaxValIx!= MaxIx) { //若最大值不在指定的arr.length-1-i位置上,则交换这两位的值 t=arr[MaxIx]; arr[MaxIx]=arr[MaxValIx]; arr[MaxValIx]=t; } } for (int i : arr) { System.out.println(i); }// 插入排序
插入排序
int []arr={45,32,89.17,6}; for (int i = 1,t,j; i <arr.length ; i++) { if (arr[i]>arr[i-1]) continue; t=arr[i]; for (j = i-1; j>=0&&t<arr[j] ; j--) { arr[j+1]=arr[j]; } arr[j+1]=t; //i下标前的值依次和t比较,如大于t,则当前j下标的值覆盖前一位的值,直到找到小于t的值或j减到-1,退出循环,执行t覆盖arr[j+1] } for (int i : arr) { System.out.println(i); }//希尔排序
希尔排序
int []arr={45,32,89.17,6}; int step=arr.length; while((step=step/2)>=2){ for (int i = 0,t; i+step < arr.length; i++) { if (arr[i+step]<arr[i]) { t=arr[i+step]; arr[i+step]=arr[i]; arr[i]=t; } } }//用step给数组分成几组数组,进行排序,使得数组相对有序,直到step=1,再用前面的插入排序,进行最后的排序 for (int i = 1,t,j; i < arr.length; i++) { if (arr[i]>arr[i-1]) continue; t=arr[i]; for (j = i-1; j>=0&&t<arr[j]; j--) { arr[j+1]=arr[j]; } arr[j+1]=t; } for (int i : arr) { System.out.println(i); }//桶排序
桶排序
int []arr={45,32,89.17,6}; final int U=10; int [][]bucket=new int[U][arr.length];//二维桶数组,第一个[]代表列数,第二个[]代表行数 int []ixs=new int[U];//ixs数组是统计桶数组每一列存入的元素的行数 for (int i = 1,t,count; ; i*=10) { count=0; //循环给数组每个元素取个位数,先执行下面循环,再取十位,执行下面循环,再取百位,直到所有元素的最高为0,即count=0,退出循环 for (int j = 0; j < arr.length; j++) { count = (t=arr[j]/i)>=1 ? ++count:count; bucket[t%=U][ixs[t]++]=arr[j]; }//个位数相同的依次填入桶数组bucket[][]中【第二次执行for循环(此时i=10),取得就是十位数】 if (count==0) break; for (int j = 0,ix=0; j < bucket.length; j++) { for (int k = 0; k <ixs[j] ; k++) { arr[ix++]=bucket[j][k]; } } //把按个位数排序排在桶数组中的元素依次取出更新为新的arr[ix]数组 for (int j = 0; j<ixs.length; j++) { ixs[j]=0; //清空统计桶数组每一列存入的元素的个数 } } for (int i : arr) { System.out.println(i); }