js学习笔记---两种排序算法
1.冒泡排序 原理:每轮去找最大or最小的数的数字放在队列的最后(前)面,不停的调换位置 每轮的比较次数会越来越少,下面有个例子帮助理解: 23,18,68,9,12,89,54,10 假设两两比较,谁大往后站 第一轮:18 23 9 12 68 54 10 89 比较7次 第二轮:18 9 12 23 54 10 68 89 比较6次 第三轮:9 12 18 23 10 54 68 89 比较5次 .....以此类推,到最后一定是正确顺序 其中用i控制这是第几轮循环,然后用j来控制第i轮循环中需要比较几次,这里注意,j要从等于0开始,而不是j=i。 js 代码: var ary=[23,18,68,9,12,89,54,10]； var b bblesort=f nction(ary) { for(var i=0；i { for(var j=0；j { if(ary[j+1]ary[j]) { var temp=ary[j]； ary[j]=ary[j+1]； ary[j+1]=temp； } } } console.log(ary)； } b bblesort(ary)； 改进版,当有序的时候就不用再循环了,就是在每轮开始的时候加入一个change的标记,是否有换位置 var b bblesort=f nction(ary) { for(var i=0；i { var change=0； for(var j=0；j { if(ary[j+1] var temp = ary[j]； ary[j] = ary[j + 1]； ary[j + 1] = temp； change = 1；改变过 } } if(！change) { ret rn ary； } } ret rn ary； } console.log(b bblesort(ary)) ； 二、快速排序 原理:就是随便选取一个数字,作为中间的分水岭,小于它的放在左边,大于它的放在右边,然后左边右边在用递归一直执行这个函数,最终得到结果。 (1)在数据集之中,选择一个元素作为"基准"(pivot)。 (2)所有小于"基准"的元素,都移到"基准"的左边；所有大于"基准"的元素,都移到"基准"的右边。 (3)对"基准"左边和右边的两个子集,不断重复第一步和第二步,直到所有子集只剩下一个元素为止。 f nction sort6(array) { var tmp_array = array.slice(0), res lt, q icksort = f nction(arr) { if (arr.length = 1) { ret rn arr； } var pivotindex = math.floor(arr.length  2)； var pivot = arr.splice(pivotindex, 1)[0]； var left = []； var right = []； for (var i = 0； i  arr.length； i){ if (arr[i]  pivot) { left.p sh(arr[i])； } else { right.p sh(arr[i])； } } ret rn q icksort(left).concat([pivot], q icksort(right))； }； res lt = q icksort(tmp_array)； ret rn res lt；