快速排序
原理:分治法
首先在数组中找到一个基准数(一般第一个),然后将数组中比基准数小的数字移到数组左边,将比基准数大的数字移到数组右边,这样基准数两边的数组相对有序,之后继续对两个数组找出基准数然后移动,直到各分区只有一个数字为止。
代码:
public void sort(int[] array,int begin,int end){ if(begin<end){ int key=array[begin]; int i=begin; int j=end; while(i<j&&array[j]>key){ j--; } if(i<j){ array[i]=array[j]; } while(i<j&&array[i]<key){ i++; } if(i<j){ array[j]=array[i]; } array[i]=key; sort(array,begin,i-1); sort(array,i+1,end); } }
性能:快速排序不稳定,基准值的比较和交换是跳跃进行的。
平均时间复杂度O(nlogn)
最差时间复杂度O(n^2) 每次都需要比较和交换 类似冒泡排序 每次划分都只能将序列划分为一个元素和其他元素两部
最好的情况,每次均分两部分
模拟排序过程:给个数组模拟排序过程