json数据中的某一个字段进行快速排序quicksort
快速排序(Quicksort)是对冒泡排序的一种改进,是一种分而治之算法归并排序的风格.
核心的思想就是通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列
理论上的步骤:
- 找到一个“支点”项目在数组中,可以是中心点,基准
- 在阵列中的第一项开始指针(左指针)。
- 在数组中的最后一个项目开始一个指针(右指针)。
- 而在左指针数组中的值小于枢轴值,将左指针向右(加1)。 继续,直到在左指针的值大于或等于所述枢轴值。
- 而在合适的指针数组中的值大于枢轴值,将右指针向左(减去1)。 继续下去,直到在正确的指针的值小于或等于所述枢轴值。
- 如果左指针是小于或等于右指针,然后交换的值在数组中的这些位置。
- 移动左指针向右由1和右指针向左之一。
- 如果左指针和右指针不符合,请转到步骤1。
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 </head> 7 <body> 8 9 </body> 10 </html> 11 <script type="text/javascript"> 12 /*** 13 * 快速排序 Quicksort 14 * 第一步 在数据集之中,选择一个元素作为“基准”。 15 * 第二步 所有小于"基准"的元素,都移到"基准"的左边;所有大于"基准"的元素,都移到"基准"的右边。 16 * 第三步 对"基准"左边和右边的两个子集,不断重复第一步和第二步,直到所有子集只剩下一个元素为止。 17 * 18 */ 19 var arr_style = [ 20 {name: 'a', phone: 1, value: 'val_4'}, 21 {name: 'b', phone: 5, value: 'val_3'}, 22 {name: 'd', phone: 3, value: 'val_2'}, 23 {name: 'c', phone: 4, value: 'val_1'}, 24 {name: 'e', phone: 13, value: 'val_5'}, 25 {name: 'f', phone: 23, value: 'val_6'}, 26 {name: 'g', phone: 14, value: 'val_7'}, 27 {name: 'h', phone: 43, value: 'val_8'} 28 ]; 29 var arr = []; 30 for(var a =0; a< arr_style.length; a++){ 31 arr[a]= arr_style[a].phone; 32 } 33 var quicksort = function(arr){ 34 if(arr.length <= 1){return arr;} 35 var pivotIndex = Math.floor(arr.length/2); 36 var pivot = arr.splice(pivotIndex, 1)[0]; 37 var left = []; 38 var right = []; 39 40 for(var i = 0; i< arr.length; i++){ 41 if(arr[i] < pivot){ 42 left.push(arr[i]); 43 }else{ 44 right.push(arr[i]); 45 } 46 } 47 return quicksort(left).concat([pivot], quicksort(right)); 48 } 49 var result = quicksort(arr); 50 console.log(JSON.stringify(result)); 51 </script>