快速排序算法
1.快速排序分解
数组A[l,r]被划分为俩个(可能为空)的子数组A[p,q-1],A[q+1,r],使得A[p,q-1]的每一个元素都小于A[q],A[q+1,r]中每个元素都大于A[q],其中计算下标q也是规划的一部分。
2.解决
通过调用快速排算法,分别对子数组A[p,q-1],A[q+1,r]进行排序。
3.合并
因为子数组都是原址排序,所以不需要合并操作,数组A[l,r]已经有序。
4.代码
public static void quickSort(int[] arr,int left,int right){ if(left < right){ int p = partition(arr,left,right); quickSort(arr,left,p-1); quickSort(arr,p+1,right); } } public static int partition(int[] arr,int left,int right){ int p = arr[right]; int i = left -1; for(int j = left;j<= right-1;j++){ if(arr[j]<=p){ i = i+1; int t = arr[i]; arr[i] = arr[j]; arr[j] = t; } } int t2 = arr[i+1]; arr[i+1] = arr[right]; arr[right] = t2; return i+1; }
5.性能
快速排序大多数情况时间复杂度为O(nlogn),最坏情况下是有序时时间复杂度为O(n2),空间复杂度为O(n)。
浙公网安备 33010602011771号