快速排序算法是排序算法中效率比较高的一种算法,它主要思想是二分与递归。快速排序算法一开始可能比较难理解,但是理解之后也是比较容易记住的。
快速排序算法的主要思想
1.以数组元素的第一个数为判断数(哨兵元素)
2.从数组元素的队尾开始,找到一个别哨兵元素小的元素Right
3.从数组元素的队头开始,找到一个别哨兵元素大的元素Left
4.交换元素Right与Left
5.循环3、4步骤,知道Right与Left的位置相等,交换哨兵元素的位置
6.将哨兵元素的前部队列与后部队列一次重复上述步骤,使用递归完成排序
/**
* 快速排序法
*/
public void quickSort(int[]a, int left, int right){
int i,j,t,temp;
if(left>right)return;
temp=a[left];
i=left;j=right;
while(i!=j){
while(a[j]>=temp && i<j){ //右边第一个小于判断数(temp)的数
j--;
}
while(a[i]<=temp && i<j){ //左边第一个小于判断数(temp)的数
i++;
}
if (i<j){ //交换两个数位置
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
//此时i=j,与判断数交换位置
a[left] = a[i];
a[i] = temp;
quickSort(a,left,i-1);
quickSort(a,i+1,right);
}
时间复杂度分析
排序算法的平均时间复杂度为O(Nlogn),最差时间复杂度为O(n2)
以下是个人对快速排序法的理解和代码。针对高效率的快速排序算法还有待研究