快速排序的算法思想、动态演示 、C++、python实现,请参考快速排序详解
快速排序也是一种选择排序。
快速排序的思想:将序列分为两部分,左边一部分比它小,右边一部分比它大。然后递归。这里的它,指的是基数。
快速排序的性能分析
每次分成两个序列都需要1个空间存储基准值。由于递归,时间复杂度为NlogN,所以空间复杂度也为NlogN。
在快速排序过程中,由于相同元素可能会因为分区而交换顺序,所以它是不稳定的算法。
java实现代码
public int partition(int[] arry,int low,int high){
int temp;
int i=low,j=high;
if(low<high){//递归的边界条件
temp=arry[low];
while(i<j){
while(i<j&&arry[j]>=temp)
--j;
if(i<j){这里进行一个判断是优化操作
arry[i]=arry[j];
++i;//这里也是一个优化操作
}
while(i<j&&arry[i]<=temp)
++i;
if(i<j){这里进行一个判断是优化操作
arry[j]=arry[i];
--j;//这里一个一个优化操作
}
}
arry[i]=temp;
}
return i;
}
public int[] quickSort1(int[] arry,int low,int high){
if(low<high){
int mid=partition(arry,low,high);
quickSort1(arry,low,mid-1);
quickSort1(arry,mid+1,high);
}
return arry;
}
public int[] quickSort2(int[] arry,int low,int high){
Stack<Integer> stack=new Stack<>();
stack.push(low);
stack.push(high);
int mid;
while (stack.size()>1){
int j=stack.pop();
int i=stack.pop();
mid=partition(arry,i,j);
if (i<mid-1){
stack.push(i);
stack.push(mid-1);
}
if (mid+1<j){
stack.push(mid+1);
stack.push(j);
}
}
return arry;
}
总结
1.代码可以根据动态显示来理解,就比较清晰。
2.基准值的存储以及赋值。
3.递归