亲爱的小伙伴们,先去安一个蓝灯然后访问这里看一下效果,戳这里看一下图解
快速排序
原理
(1)在数据集中选择一个元素作为基准(pivot);
(2)所有小于基准的移到基准左侧,反之右侧;
(3)对基准左右两侧两个子集不断重复(1)、(3)步,直到所有子集只剩下一个元素为止。举例
{85, 24, 63, 45, 17, 31, 96, 50}
(1)选定45为基准
{24 17 31 45 85 63 96 50}
(2)不断重复
{24 17 31 45 85 63 96 50}
{17 24 31 45 50 63 85 96}
{17 24 31 45 50 63 85 96}
排序之后:{17 24 31 45 50 63 85 96}代码
function quicksort(arr)
{
if (arr.length == 0)
return [];
var left = new Array();
var right = new Array();
var pivot = arr[0];
for (var i = 1; i < arr.length; i++) {
if (arr[i] < pivot) {
left.push(arr[i]);
} else {
right.push(arr[i]);
}
}
return quicksort(left).concat(pivot, quicksort(right));
}
console.log(quicksort(a));
冒泡排序
原理
对比第一项和第二项
如果第一项应该在第二项的后面,交换
对比第二项和第三项
如果第二项应该在第三项之后,交换
持续直到数据结束举例
对数组[3, 2, 4, 5, 1]排序
顺序正确则无须交换,循环直至[1,2,3,4,5]代码
//简单js思路
function swap(items, firstIndex, secondIndex){
var temp = items[firstIndex];
items[firstIndex] = items[secondIndex];
items[secondIndex] = temp;
}
//正序正向冒泡排序
//外循环控制循环周期数,内循环则是项与项之间的排序比较
function bubbleSort(items){
var len = items.length,
i, j, stop;
for (i=0; i < len; i++){
for (j=0, stop=len-i; j < stop; j++){
if (items[j] > items[j+1]){
swap(items, j, j+1);
}
}
}
return items;
}
//正序反向冒泡排序
function bubbleSort(items){
var len = items.length,
i, j;
for (i=len-1; i >= 0; i--){
for (j=len-i; j >= 0; j--){
if (items[j] < items[j-1]){
swap(items, j, j-1);
}
}
}
return items;
}
//反序冒泡排序
function bubbleSort(items){
var len = items.length,
i, j,stop;
for (i=0; i < len; i++){
for (j=0; stop=len-i; j++){
if (items[j] < items[j+1]){
swap(items, j, j+1);
}
}
}
return items;
}
选择排序
原理
把每一个数都与第一个数比较,如果小于第一个数,就把它们交换位置;重复n-1轮。
代码
function selectSort(arr){
var len=arr.length;
var temp;
for(var i=0;i<len-1;i++){
for(var j=i+1;j<len;j++){
if(arr[j]<arr[i]){
temp=arr[j];
arr[j]=arr[i];
arr[i]=temp;
}
}
i++;
}
return arr;
}