算法介绍java
快速排序由C. A. R. Hoare在1960年提出。它的基本思想是:经过一趟排序将要排序的数据分割成独立的两部分,其中一部分的全部数据都比另一部分的全部数据都要小,而后再按此方法对这两部分数据分别进行快速排序,整个排序过程能够递归进行,以此达到整个数据变成有序序列。算法
算法描述数组
快速排序使用分治法来把一个串(list)分为两个子串(sub-lists)。具体算法描述以下:ui
步骤1:从数列中挑出一个元素,称为 “基准”(pivot );
步骤2:从新排序数列,全部元素比基准值小的摆放在基准前面,全部元素比基准值大的摆在基准的后面(相同的数能够到任一边)。在这个分区退出以后,该基准就处于数列的中间位置。这个称为分区(partition)操做;
步骤3:递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。code
算法实现blog
public void quickSort(int[] num, int left, int right) { //若是left等于right,即数组只有一个元素,直接返回 if(left>=right) { return; } //设置最左边的元素为基准值 int key=num[left]; //数组中比key小的放在左边,比key大的放在右边,key值下标为i int i=left; int j=right; while(i<j){ //j向左移,直到遇到比key小的值 while(num[j]>=key && i<j){ j--; } //i向右移,直到遇到比key大的值 while(num[i]<=key && i<j){ i++; } //i和j指向的元素交换 if(i<j){ int temp=num[i]; num[i]=num[j]; num[j]=temp; } } num[left]=num[i]; num[i]=key; quickSort(num,left,i-1); quickSort(num,i+1,right); }
算法分析排序
时间复杂度度O(nlogn),空间复杂度(logn)。递归
不稳定排序(例a与b值相同,可是在比较后有可能会发生位置变化)内存
内排序(全部排序操做都在内存中完成)it