1. array排序函数sort
    2. 冒泡排序
    3. 选择排序
    4. 插入排序
    5. 快速排序


    1、array排序函数sort
    使用Array的sort方法。
    如果返回一个大于0的值,则元素交换位置
    如果返回一个小于0的值,元素位置不变
    如果返回一个0,则认为2个元素相等,也不交换位置

    1. var arr = [2, 8, 5, 0, 5, 2, 6, 7, 2]
    2. arr.sort((a,b) => {
    3. return a - b
    4. })
    5. console.log(arr) // 结果:[0, 2, 2, 2, 5, 5, 6, 7, 8]


    2、冒泡排序
    将数组中的相邻两个元素进行比较,将比较大(较小)的数通过两两比较移动到数组末尾(开始),执行一遍内层循环,确定一个最大(最小)的数,外层循环从数组末尾(开始)遍历到开始(末尾)。

    1. var arr = [2, 8, 5, 0, 5, 2, 6, 7, 2]
    2. for(var i=0;i<arr.length;i++) {
    3. for(var j=0;j<arr.length-1;j++) {
    4. if (arr[j]>arr[j+1]) {
    5. let news = arr[j]
    6. arr[j] = arr[j+1]
    7. arr[j+1] = news
    8. }
    9. }
    10. }
    11. console.log(arr) // 结果:[0, 2, 2, 2, 5, 5, 6, 7, 8]


    3、选择排序
    首先从原始数组中找到最小的元素,并把该元素放在数组的最前面,然后再从剩下的元素中寻找最小的元素,放在之前最小元素的后面,minIndex始终保存着最小值的位置的索引,随着i的自增,遍历的数组长度越来越短,直到完成排序。

    1. var arr = [2, 8, 5, 0, 5, 2, 6, 7, 2]
    2. for(var i=0;i<arr.length;i++) {
    3. var minIndex=i;
    4. for(var j=i+1;j<arr.length;j++) {
    5. if(arr[j]<arr[minIndex]){
    6. minIndex=j
    7. }
    8. }
    9. if(minIndex!=i){
    10. var news = arr[i];
    11. arr[i]=arr[minIndex]
    12. arr[minIndex]=news
    13. }
    14. }
    15. console.log(arr) // 结果:[0, 2, 2, 2, 5, 5, 6, 7, 8]

    4、插入排序

    1. var arr = [2, 8, 5, 0, 5, 2, 6, 7, 2]
    2. //假设第0个元素是一个有序的数列,第1个以后的是无序的序列,
    3. //所以从第1个元素开始将无序数列的元素插入到有序数列中
    4. for(var i = 1; i < arr.length; i++){
    5. //升序
    6. if(arr[i] < arr[i-1]){
    7. //取出无序数列中的第i个作为被插入元素
    8. var guard = arr[i];
    9. //记住有序数列的最后一个位置,并且将有序数列位置扩大一个
    10. var j = i - 1;
    11. arr[i] = arr[j];
    12. //比大小,找到被插入元素所在的位置
    13. while(j >= 0 && guard < arr[j]){
    14. arr[j+1] = arr[j];
    15. j--;
    16. }
    17. //插入
    18. arr[j+1] = guard;
    19. }
    20. }
    21. console.log(arr) // 结果:[0, 2, 2, 2, 5, 5, 6, 7, 8]


    5、快速排序
    快速排序涉及到了递归,将一个数组的排序问题看成是两个小数组的排序问题,而每个小的数组又可以继续看成更小的两个数组,一直递归下去,直到数组长度大小最大为2。

    1. var arr = [2, 8, 5, 0, 5, 2, 6, 7, 2]
    2. function quickSort(arr){
    3. if(arr.length<=1){//如果数组只有一个数,就直接返回;
    4. return arr;
    5. }
    6. var num=Math.floor(arr.length/2);//找到中间数的索引值,如果是浮点数,则向下取整
    7. var newValue=arr.splice(num,1);//找到中间数的值
    8. var left=[],right=[];
    9. for(var i=0;i<arr.length;i++){
    10. if(arr[i]<newValue){
    11. left.push(arr[i]);//基准点的左边的数传到左边数组
    12. }else{
    13. right.push(arr[i]);//基准点的右边的数传到右边数组
    14. }
    15. }
    16. return quickSort(left).concat(newValue,quickSort(right));//递归不断重复比较
    17. }
    18. console.log(quickSort(arr)) // 结果:[0, 2, 2, 2, 5, 5, 6, 7, 8]