Scala快排讲解
def quickSort(nums:List[Int]): List[Int] ={
//如果集合是空的,或者集合的长度小于2,不需要进行比较了直接返回
if(nums==null||nums.size<2)
return nums
//集合第一位设为中间位,中间位左边的元素都比中间位小,中间位右边的元素都比中间位大
//左侧进行递归判断,右侧进行递归判断
quickSort(nums.filter(_<nums.head))++nums.filter(_==nums.head)++quickSort(nums.filter(_>nums.head))
}
Java快排讲解
public static void quickSort(int[] nums,int left,int right){
if(left>=right)return;
//如果左下标碰到右下标,则结束递归
int l = left;
//定义左下标元素
int r = right;
//定义右下标元素
int key = nums[l];
//定义中间位,即key左边的数都比key小,key右边的数都比key大
while(l<r){
//循环有效条件
while(nums[r]>=key && l<r)r--;
//如果右下标元素比key大,右下标-1
while(nums[l]<=key && l<r)l++;
//如果左下标元素比key小,左下标元素+1
int temp = nums[r];
nums[r] = nums[l];
nums[l] = temp;
//交换左右边的元素,因为这个时候,左下标元素是比key大的,右下标元素是比key小的,交换位置正好使中间位成立
}
//退出循环后,这个时候key左边的元素都比key小,key右边的元素都比key大
nums[left] = nums[l];
//left此时为中间位的位置,应该和一开始定义的key位置互调
nums[l] = key;
quickSort(nums,left,l-1);
//中间位左侧继续递归
quickSort(nums,l+1,right);
//中间位右侧继续递归
}