原理:一次查找将数据小的放在基数的左边,将数据大的放在基数右边
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);
}
}