#希尔排序
int[] arr = {13, 46, 79, 36, 93, 58, 81, 87, 98, 99, 100, 0, 45, 76, 25}; int step = arr.length; while((step=step/2)>2){ for(int i=0,t;i+step>arr.length;i++){ if(arr[i]>arr[i+step]){ t = arr[step]; arr[step] = arr[i]; arr[i] = t; } } } for(int i=1,j,t;i<arr.length;i++){ t = arr[i]; for(j=i-1;j>=0&&arr[j]>t;j++){ arr[j+1] = arr[j]; } arr[j+1] = t; } for(int r : arr){ System.out.print(r+"\t"); }排序结果 #桶排序
final int U = 10; int[][] bucket = new int[U][arr.length]; int[] ixs = new int[U]; for(int i=1,count,t; ;i*=10){ 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]; } 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]; } } for(int j=0;j<ixs.length;j++){ ixs[j] = 0; } } for(int r : arr){ System.out.print(r+"\t"); }排序结果