目的:掌握 快速排序 的 基本思想与过程、代码实现、时间复杂度
1、基本思想与过程:(分治思想,挖坑填数)
(1)从数列中选择一个数作为key值;
(2)将比这个数小的数全部放在它的左边,大于或等于它的数全部放在它的右边;
(3)对左右两个小数列重复第二步,直至各区间只有1个数。
下面对数组【42,20,17,13,28,14,23,15】进行快速排序,模拟两轮排序的结果如下:
2、代码实现:
function quickSort(a,l,r){ if(l>=r) return; var i = l; var j = r; var key = a[l];//选择第一个数为key console.log('quickSort(a,'+l+','+r+')') while(i<j){ while(i<j && a[j]>=key){//从右向左找第一个小于key的值 j--; } if(i<j){ a[i] = a[j]; i++; } while(i<j && a[i]<key){//从左向右找第一个大于key的值 i++; } if(i<j){ a[j] = a[i]; j--; } } //i == j a[i] = key; quickSort(a, l, i-1);//递归调用 quickSort(a, i+1, r);//递归调用 return a; }
3、时间复杂度:O(N*logN)