1. 冒泡排序

  冒泡排序的原理是:数据会像气泡一样从数组的一端漂浮到另一端,顺序比较相邻的元素,如果右侧比左侧数值大,则交换元素。  假设一组数据正在按照升序排列,那么较大的值会浮动到数组的右侧,较小的值会浮动到数组的左侧。

 1 function bubbleSort(needSortData){
 2     var len = needSortData.length;
 3     for(var outer = len; outer > 1; outer--){
 4         for(var inner = 0; inner <= outer - 1; inner++){
 5             if(needSortData[inner] > [needSortData][inner + 1]){
 6                 var temp = needSortData[inner];
 7                 needSortData[inner] = needSortData[inner + 1];
 8                 needSortData[inner + 1] = temp;
 9             }
10         }
11     }
12 }

  总结:外循环的长度由最大递减到1。内循环的遍历的长度也根据外循环的长度减小到1。如果左侧数值大于右侧数值,则交换。否则,不做任何操作。

2.选择排序

  选择排序的原理:从第一个数据依次进行比较数值,检查完所有的元素后,最小的数值会被放在第一个位置上。然后从第二个数据开始,继续检查剩下的所有元素后。依次类推。直到应该检查倒数第二个数据的时候,所有数据就完成了排序。

 1 function selectSort(needSortData){
 2     var len = needSortData.length;
 3     var min;
 4     for(var outer = 0; outer <= len - 2; outer++){
 5         var min = outer;
 6         for(var inner = outer + 1; inner < len - 1; inner++){
 7             if(needSortData[inner] < min){
 8                 min = inner;
 9             }
10             var temp = needSortData[outer];
11             needSortData[outer] = needSortData[inner];
12             needSortData[inner] = temp;
13         }
14     }
15 }

  总结:外循环从数组的第一个元素移动到倒数第二个元素;内循环从第二个数组元素移动到最后一个元素,查找比当前外循环所指向的元素小的元素。每次内循环迭代后,数组中最小的值都会被赋值到内循环起始的位置。

3.插入排序:

   插入排序的原理:外循环将数组元素挨个移动,而内循环则对外循环中选中的元素及它后面的那个元素进行比较。如果外循环中选中的元素比内循环中选中的元素小,那么数组元素会向后移动,为内循环中的这个元素腾出位置。

  

 1 function insertSort(needSortData){
 2     var len = needSortData.length;
 3     var temp;
 4     for(var outer = 1; outer <= len - 1; outer++){
 5         temp = needSortData[outer];
 6         inner = outer;
 7         while(inner > 0 && needSortData[inner - 1] >= temp){
 8             needSortData[inner] = needSortData[inner - 1];
 9             inner--;
10         }
11         needSortData[inner] = temp;
12     }
13 }

这三种普通的排序方法性能比较是:插入排序性能最好,然后是选择排序,最后是冒泡排序。