排序算法 javascript
一、冒泡排序
冒泡排序的基本思想是:每次比较两个相邻的元素,如果它们的顺序错误就把它们交换位置。
需要进行 n-1 趟比较,每一趟至少会有一个数归位。
例:[12,35,99,18,76]
var nums = [12,35,99,18,76]; for(let i=0;i<nums.length-1;i++){ for(let j=0;j<nums.length-i;j++){ if(nums[j]<nums[j+1]){ let temp = nums[j]; nums[j] = nums[j+1]; nums[j+1] = temp; } } }
输出:nums = [99,76,35,18,12]
需要注意的点:
- 最外层循环的次数
- 第二层循环 j 的取值范围
冒泡排序的时间复杂度是 O(n^2)
二、快速排序
首先在数组中随机找一个数作为 基准数 ,然后(先)从右开始找到第一个比基准数小的,从左开始找到第一个比基准数大的,交换!直到左右碰头,再分别处理基准数左右两边的数列。
例:[6,1,2,7,9,3,4,5,10,8]
var nums = [6,1,2,7,9,3,4,5,10,8]; function quickSort(left,right){ let i=left; let j=right; let temp=nums[left]; if(left>right){ return; } while(i!=j){ while(nums[j]>=temp&&i<j){ j--; } while(nums[i]<=temp&&i<j){ i++; } if(i<j){ let t = nums[i]; nums[i] = nums[j]; nums[j] = t; } } //i==j nums[left] = nums[i]; nums[i] = temp; quickSort(left,i-1); quickSort(j+1,right); } quickSort(0,nums.length-1);
输出:[1,2,3,4,5,6,7,8,9,10]