所谓快速排序算法是基于交换排序和递归思想的,它的速度的确如名字所示——快!而且这种一算通常被用做数量级比较大的数据当中,在大数据中有着很重要的地位。算法
下面是快速排序算法的流程:
一、首先设定一个分界值(通常都是取中间或者第一个数),经过该分界值将数组分红左右两部分; 二、将数组中大于等于分界值的数值放在分界值的右边,将数组中小于等于分界值的数值放在分界值的左边;
三、而后左右两边的数组又能够按照这个方式进行独立排序;
四、重复这个过程,能够看出这是一种递归的思想,当递归到最后,整个数组也就排序完成;数组
下面经过一个例子来说解一下:对数组int[] arr = {34,25,65,33,16,78,43,22}进行快速排序大数据
{22,25,65,33,16,78,43,34}ui
语言组织能力有限,直接上代码:code
/** * 排序算法之快速排序 * 参数arr为须要排序的数组 * 参数left为数组的起始下角标即0 * 参数right为数组的最后下角标即arr.length-1 */ private void quickSort(int[] arr,int left,int right) { int f,t; int rtemp,ltemp; ltemp = left; rtemp = right; f = arr[(left+right)/2]; //通过一轮排序,已经将数组分为左右两部分 while(ltemp<rtemp) { while(arr[ltemp]<f) { ++ltemp; } while(arr[rtemp]>f) { --rtemp; } if(ltemp<=rtemp) { t = arr[ltemp]; arr[ltemp] = arr[rtemp]; arr[rtemp] = t; --rtemp; ++ltemp; } } if(ltemp == rtemp) { ltemp++; } //进行递归排序 if(left<rtemp) { quickSort(arr,left,ltemp-1); } if(ltemp<right) { quickSort(arr,rtemp+1,right); } }
快速排序的精髓在于分治思想,分而治之,它的时间复杂度为O(nlog2n)。排序