js中常见的数组排序算法-冒泡排序和选择排序
reverse( ) 数组逆序
// reverse() 数组逆序 var arr = ["边境牧羊犬", "德国牧羊犬", "金毛", "贵宾犬", "柯基犬"]; arr.reverse(); alert(arr); //柯基犬,贵宾犬,金毛,德国牧羊犬,边境牧羊犬
reverse 直接修改原数组。
sort() 排序
按照字符串排序。
var arr = [5, 4, 1, 2, 3]; var arr = [1, 20, 15, 10, 2]; arr.sort(); alert(arr); //1,10,15,2,20 按字符串排序(ASCLL码)还是从右往左比
/*
【注】排序,尽量自己去封装排序的方法,不要用官方给定的方法。
冒泡排序
选择排序
*/
排序算法:
1、冒泡排序
// var arr = [9, 8, 7, 6, 5, 4];
/*
将上述数组,从小到大进行排序。
冒泡排序规则:前后两两进行比较,如果符合比较的条件,就交换两个数的位置,直到所有的数据,都符合从小到大条件,结束排序。
规律:每一轮比较,都会找出一个较大的数,放在正确的位置。
第一轮:
9, 8, 7, 6, 5, 4
8, 9, 7, 6, 5, 4
8, 7, 9, 6, 5, 4
8, 7, 6, 9, 5, 4
8, 7, 6, 5, 9, 4
8, 7, 6, 5, 4, 9
第二轮:
8, 7, 6, 5, 4
7, 8, 6, 5, 4
7, 6, 8, 5, 4
7, 6, 5, 8, 4
7, 6, 5, 4, 8
第三轮:
7, 6, 5, 4
6, 7, 5, 4
6, 5, 7, 4
6, 5, 4, 7
第四轮:
6, 5, 4
5, 6, 4
5, 4, 6
第五轮:
5, 4
4, 5
总结:
比较的轮数 = 数组长度 - 1;
每一轮比较的次数 = 数组长度 - 当前轮数
根据总结写代码:
1 //决定比较几轮 2 for(var i = 0; i < arr.length - 1; i++){ 3 //决定每一轮比较多少次 4 for(var j = 0; j < arr.length - i - 1; j++){ 5 if(arr[j] > arr[j + 1]){ 6 var tmp = arr[j]; 7 arr[j] = arr[j + 1]; 8 arr[j + 1] = tmp; 9 } 10 } 11 } 12 13 alert(arr);//4,5,6,7,8,9
我们在用的时候可以你把这段代码封装成函数,这样以后直接通过script标签的src属性调用,就可以了。像下面这样
1 function BubbleSort(arr){ 2 for(var i = 0; i < arr.length - 1; i++){ 3 //决定每一轮比较多少次 4 for(var j = 0; j < arr.length - i - 1; j++){ 5 if(arr[j] > arr[j + 1]){ 6 var tmp = arr[j]; 7 arr[j] = arr[j + 1]; 8 arr[j + 1] = tmp; 9 } 10 } 11 } 12 }
调用:
1 <script src= "封装冒泡函数的js文件名"></script> 2 <script> 3 var arr = [9, 8, 7, 6, 5, 4]; 4 alert(arr);//9,8,7,6,5,4 5 BubbleSort(arr);//调用冒泡排序函数 6 7 alert(arr); 8 //4,5,6,7,8,9 9 </script>
-------------------------------------------------
选择排序(打雷台法):
选择排序/打擂台法:
规律:通过比较首先选出最小的数放在第一个位置上,然后在其余的数中选出次小数放在第二个位置上,依此类推,直到所有的数成为有序序列。
第一轮:
9, 8, 7, 6, 5, 4
8, 9, 7, 6, 5, 4
7, 9, 8, 6, 5, 4
6, 9, 8, 7, 5, 4
5, 9, 8, 7, 6, 4
4, 9, 8, 7, 6, 5
一号位 比较出最小的数为4
第二轮:
9, 8, 7, 6, 5
8, 9, 7, 6, 5
7, 9, 8, 6, 5
6, 9, 8, 7, 5
5, 9, 8, 7, 6
二号位 比较出最小的数为5
第三轮:
9, 8, 7, 6
8, 9, 7, 6
7, 9, 8, 6
6, 9, 8, 7
三号位 比较出最小的数为6
第四轮:
9, 8, 7
8, 9, 7
7, 9, 8
四号位 比较出最小的数为7
第五轮:
8, 9
四号位 比较出最小的数为8
总结:
比较的轮数 = 数组长度 - 1
每一轮比较次数 = 数组长度 - 当前轮次
根据总结写代码:
1 var arr = [9, 8, 7, 6, 5, 4]; 2 //用选择排序的方法从小到大排列数组元素。 3 4 //比较的轮数 5 for(var i = 0; i < arr.length - 1; i++){ 6 //每轮比较的次数 7 for(var j = i + 1; j < arr.length; j++){ 8 if(arr[i] > arr[j]){ 9 var tmp = arr[i]; 10 arr[i] = arr[j]; 11 arr[j] = tmp; 12 } 13 } 14 } 15 16 alert(arr);//4,5,6,7,8,9
我们在用的时候可以你把这段代码封装成函数,这样以后直接通过script标签的src属性调用,就可以了。像下面这样
function changeSort(arr){ for(var i = 0; i < arr.length - 1; i++){ //次数 for(var j = i + 1; j < arr.length; j++){ if(arr[i] > arr[j]){ var tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp; } } } }
调用:
1 <script src= "封装选择排序函数的js文件名"></script> 2 <script> 3 var arr = [9, 8, 7, 6, 5, 4]; 4 alert(arr);//9,8,7,6,5,4 5 changeSort(arr);//调用冒泡排序函数 6 7 alert(arr); 8 //4,5,6,7,8,9 9 </script>
以上就是关于数组排序中的 冒泡排序和选择排序的讲解。