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>

以上就是关于数组排序中的 冒泡排序和选择排序的讲解。

posted @ 2018-08-27 16:38  暗恋桃埖源  阅读(6699)  评论(0编辑  收藏  举报