javascript基本排序算法实现
快速排序
1 //快速排序思想 2 // 3 // (1)在数据集之中,选择一个元素作为"基准"(pivot)。 4 // (2)所有小于"基准"的元素,都移到"基准"的左边;所有大于"基准"的元素,都移到"基准"的右边。 5 // (3)对"基准"左边和右边的两个子集,不断重复第一步和第二步,直到所有子集只剩下一个元素为止。 6 7 8 function quickSort(array) { 9 //判断是不是数组 10 if (Array.isArray(array)) { // 11 //判断数组长度 12 //作用一:如果传入的数组为空数组或是只有一个长度,直接返回 13 // 14 //递归运算 最后返回返回的left right长度为一时的退出条件 终止循环 15 if (array.length <= 1) { 16 return array; 17 } 18 //尽可能的取数组中间的值 19 var pivotIndex = Math.floor(array.length / 2); 20 var pivot = array.splice(pivotIndex, 1)[0]; 21 22 //分别定义左右两个数组 23 var left=[], 24 right=[]; 25 26 for(var i=0; i<array.length; i++){ 27 if(array[i]<=pivot){ 28 left.push(array[i]) 29 }else{ 30 right.push(array[i]) 31 } 32 } 33 34 //拼接数组 35 //递归运算 36 return quickSort(left).concat([pivot], quickSort(right)); 37 38 }else{ 39 console.log("请传入数组") 40 } 41 } 42 43 44 console.log(quickSort([12,32,3,5,32,8,24,1]))
冒泡排序
//冒泡排序 //实现思路 //比较数组相邻元素的大小 //从小到大排序 对调两个元素的位置 function bubbleSort(array){ //第一步判断是不是数组 if(Array.isArray(array)){ var temp,i,j, len=array.length; for(i=0; i<len; i++){ for(j=0; j<len; j++){ if(array[i]<array[j]){ temp=array[i]; array[i]=array[j]; array[j]=temp; } } } return array; } } console.log(bubbleSort([12,32,3,5,32,8,24,1]))
插入排序
//插入排序 function insertSort(array) { if (Array.isArray(array)) { //假设第0个元素是一个有序的数列,第1个以后的是无序的序列, //所以从第1个元素开始将无序数列的元素插入到有序数列中 for (var i = 1; i < array.length; i++) { //升序 if (array[i] < array[i - 1]) { //取出无序数列中的第i个作为被插入元素 var guard = array[i]; //记住有序数列的最后一个位置,并且将有序数列位置扩大一个 var j = i - 1; array[i] = array[j]; //比大小,找到被插入元素所在的位置 while (j >= 0 && guard < array[j]) { array[j + 1] = array[j]; j--; } //插入 array[j + 1] = guard; } } return array }else{ console.log("非数组") } } console.log(insertSort([12,32,3,5,32,8,24,1]))