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 }
这三种普通的排序方法性能比较是:插入排序性能最好,然后是选择排序,最后是冒泡排序。
浙公网安备 33010602011771号