冒泡排序
-
思路
- 1 先遍历数组,让挨着的两个进行比较,如果前一个比后一个大,就把两个换个位置
- 2 数组遍历一遍以后,最后一个数组就是最大的那个了
- 3 然后进行第二轮遍历,还是按照之前的规则,第二大的数字就会跑到倒数第二的位置
- 4 依次类推,最后就会按照顺序排好了
-
准备工作1:准备一个乱序的数组
var arr = [3,1,5,6,9,7,2,8]
-
准备工作2:如何调换两个数组元素的内容:arr[0]和arr[1]调个位置
var temp = arr[0];//temp = 3; arr[0] = arr[1]; arr[1] = temp;
-
准备工作3:第一次遍历数组,把最大的放到最后面去
for(var i=0;i<arr.length;i++){ // 判断:让挨着的两个进行比较,如果前一个比后一个大,就把两个换个位置 if(arr[i]>arr[i+1]){ var temp = arr[i]; arr[i] = arr[i+1]; arr[i+1] = temp; } } // 数组遍历一遍以后,最后一个数组就是最大的那个了
-
准备工作4:按照数组成都来遍历多少次
for(var j=0;j<arr.length;j++){ // j表示遍历的次数,从0开始 for(var i=0;i<arr.length;i++){ // 判断:让挨着的两个进行比较,如果前一个比后一个大,就把两个换个位置 if(arr[i]>arr[i+1]){ var temp = arr[i]; arr[i] = arr[i+1]; arr[i+1] = temp; } } }
-
收尾工作5:给一些优化
// 优化1:假设数组长度是8,其实第七次就排好了:j遍历的时候:for(var j=0;j<arr.length-1;j++) for(var j=0;j<arr.length-1;j++){ // 优化3:每一轮都要比:arr.length-1次,如果某一轮,一个位置都没换,说明已经拍好了,后面的轮数就不需要了 var num = 0; // 优化2:在同一轮遍历的时候,倒数第二个和倒数第一个比完了就结束了 // 优化4: // 第j=0次后,最后一个就确定了,第j=1次的时候,最后一个就不用比了 // 第j=1次后,倒数2个确定了,第j=2次的时候,最后二个就不用比了 for(var i=0;i<arr.length-1-j;i++){ // 判断:让挨着的两个进行比较,如果前一个比后一个大,就把两个换个位置 if(arr[i]>arr[i+1]){ num++; var temp = arr[i]; arr[i] = arr[i+1]; arr[i+1] = temp; } } if(num==0){ break; } } console.log(arr);
选择排序
-
思路
- 1 第一次遍历先假定数组中的第0个就是最小的数字的索引
- 2 然后遍历数组,只要有一个数字比我小,那么就替换之前记录的索引
- 3 直到遍历结束,就能找到最小的那个元素的索引,然后让最小元素换到第0个位置
- 4 再来第二次遍历,假定第一个是最小的元素的索引
- 5 再遍历一次数组,只要有一个数字比我小,那么就替换之前记录的索引
- 6 遍历结束后换个位置
- 7 依次类推,可以把数组排序好
-
1 准备一个乱序的数组
var arr = [3,1,5,6,9,7,2,8]
-
2 第一次遍历先假定数组中的第0个就是最小的数字的索引
var minIndex = 0;
-
3 然后遍历数组,只要有一个数字比我小,那么就替换之前记录的索引
for(var i=0;i<arr.length;i++){ if(arr[i]<arr[minIndex]){ minIndex = i; } }
-
4 遍历结束后换个位置
var temp = arr[minIndex]; arr[minIndex] = arr[0]; arr[0] = temp;
-
5 数组里面有多少个元素,就重复多少次2-4步骤
// 倒数第二轮其实已经排好了,倒数第一个轮就不需要了 for(var j=0;j<arr.length-1;j++){ // 当前是第几轮,就假设最小值是第几个 var minIndex = j; // 然后遍历数组,只要有一个数字比我小,那么就替换之前记录的索引 for(var i=j+1;i<arr.length;i++){ if(arr[i]<arr[minIndex]){ minIndex = i; } } if(minIndex!=j){ // 遍历结束后换个位置 var temp = arr[minIndex]; arr[minIndex] = arr[j]; arr[j] = temp } } console.log(arr) arr[minIndex] = arr[j]; arr[j] = temp } } console.log(arr)