快速排序
前言
快速排序是对冒泡排序的一种优化的排序算法
1、什么是快速排序?
快速排序法,是通过把每一个元素的位置确定,从而达到整个数组的排序,即,由内而外,由小及大。
快速排序法号称是目前最优秀的算法之一,实现思路是,将一个数组的排序问题看成是两个小数组的排序问题,而每个小的数组又可以继续看成更小的两个数组,一直递归下去,直到数组长度大小最大为2(如果不能理解为什么,看完这篇你就明白了)。
2、快速排序过程分析
过程分析(以从小到大排序为例):
1.元素交换法
1.过程分析
理解1:我称之为元素交换法
1.先选取数组的一个元素作为参照物(一般选取第一个或者最后一个元素)
2.如果选取第一个元素,那么就从右往左开始找元素。此时的下标记为R。每找一个元素R=R-1,直到找到一个小于参照物的元素。记录此时的R。
3.然后再从左往右开始找元素。此时的下标记为L。每找一个元素L=L+1,直到找到一个大于参照物的元素。记录此时的L,
4.如果L<R,就把下标为L,R的两个元素的位置交换一下。
5.以L,R的位置作为起点重复2和3的步骤。
6.L=R时,把参照物与此时的下标为L(R)的元素交换位置,第一次结束。
7.把L=R这个位置左右两边的元素划分为两个小数组,重复步骤1——6.
步骤7实质上是递归的思想。
过程图示:(动图是找的一个,有很多类似的动图,这个是比较符合我所理解的快速排序。)
2.代码实现
代码如下(示例):
public static void quickSort(int[] arr,int low,int high){
int i,j,temp,t;
if(low>high){
return;
}
i=low;
j=high;
//temp就是基准位
temp = arr[low];
while (i<j