原理:一次查找将数据小的放在基数的左边,将数据大的放在基数右边
public class math { public static void main(String[] args) { int[] nums= {1,2,3,3,2,4,56,34,5,54,3,9,0,1}; fsort(nums); for(int i=0;i<nums.length;i++) { System.out.println("打印"+nums[i]); } } public static void fsort(int[] nums) { System.out.println("原数组"+nums); int start=0; int end=nums.length-1; doSort(start,end,nums); } public static void doSort(int start,int end,int[] nums) { //当大于时排序完毕 if(start>=end) { return; } int i=start; int j=end; int s=nums[start]; //但请注意,如果左i先行的缘故,排序借宿arr[i]>temp,基数归位时位置错误 while (i<j) { //先从大的开始 while (i<j && s<=nums[j]) { j--; } //再查找小的 while (i<j && s>=nums[i]) { i++; } if(i<j) { int temp=nums[i]; nums[i]=nums[j]; nums[j]=temp; } } //基数归位(将初始值已入中心位置) nums[start]=nums[i]; nums[i]=s; doSort(start,i-1,nums); doSort(i+1,end,nums); } }