快排算法
快排算法的思想是基于分治的,首先定义一个基准值,将待排序数组分成两块。前一块是比基准值小的,后一块是比基准值大的。将这个基准值排序到它应该的位置的时候,这个时候基准值的位置已经确定了,之后就采用递归的方式分别对基准值前后两块待排序的子数组进行相同方法的排序。
public void quickSort(int[] nums,int low,int high){
if(low>=high){
return;
}
int middle=findmiddle(nums,low,high);
quickSort(nums,low,middle-1);
quickSort(nums,middle+1,high);
}
public int findmiddle(int[] nums,int low,int high){
int flag=nums[low];
while(low<high){
while(low<high && nums[high]>flag){
high--;
}
//因为这里的num[low]已经被保存至flag当中,所以不用担心num[low]的值丢失,直接进行覆盖即可
nums[low]=nums[high];
while(low<high && nums[low]<=flag){
low++;
}
//同理,high的值在发现有存在比flag小的值之后,就没有再进行变化了。
//这里nums[high]的值已经复制给了num[low],所以当前带排序数组中存在两个与num[high]相等的值
//因此可以直接对这个被抛弃的nums[high]覆盖。
nums[high]=nums[low];
}
//此时low与high相遇,说明第一次排序完毕,基准值到了正确的位置。
nums[low]=flag;
return low;
}
测试函数
public class Main {
public static void main(String[] args) {
Solution solution=new Solution();
Scanner in=new Scanner(System.in);
String[] strnums=null;
strnums=in.nextLine().split(" ");
int length=strnums.length;
int[] nums=new int[length];
for(int i=0;i<length;i++){
nums[i]=Integer.valueOf(strnums[i]);
}
solution.quickSort(nums,0,nums.length-1);
for(int i=0;i<nums.length;i++){
System.out.print(nums[i]+" ");
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)