基础排序算法

  冒泡排序

  冒泡排序的基本思想,就是相邻两个数字进行比较,如果它们顺序错误,就进行交换。什么是顺序错误呢?如果从大到小排列,小的在前面,大的在后面,就是顺序错误。现在对5个数12, 35, 99, 8, 100进行降序排列。

  首先比较第1个和第2个(12和35),由于是降序排列,小的在后面,大的在前面,但12比35小,却排在了前面,顺序错误,需要交换。交换后变成了 35, 12, 99, 8, 100。再比较第2个和第3个(12和99),12 还是比99小,但排在前面,需要交换位置,交换后为35, 99, 12, 8, 100。再比较第3个数和第4个数(12和8),12大于8,顺序正确,不用交换。最后第4个和第5个(8 和100),调换它们的位置 35, 99, 12, 100, 8。经过4次比较,把最小的数字8找出来了,放到了正确的位置。

  继续比较前四个数,第1个和第2个(35和99),由于35 < 99,顺序不对,进行交换,99, 35, 12, 100, 8。比较第2个和第3个(35和12), 顺序正确,不用交换。第3个和第4个(12和100),需要交换它们的位置 99, 35, 100, 12, 8;  经过3个比较,找出第二小的数,放到倒数第二个位置(正确的位置)。

  继续比较前三个,比较第1个和第2个(99和35),顺序正确,不需要交换位置。再比较第2个和第3个( 35和100), 需要交换它们的位置 99, 100, 35, 12, 8。经过2次比较,找出了第3小的数,35。 

  最后就剩前两个,比较 99和100,交换它们的位置,100, 99, 35, 12, 8。比较1次,完成任务。

     最终排序完成,100, 99, 35, 12, 8。

  每一次大的比较,都找到了一个小数,放到正确的位置。每一次,也称一趟。第一趟执行了n-1次,第二趟执行了n-2次,第三趟n-3,第四趟n-4,结束。4正好n-1.

function bubbleSort (arr) {
  let newArray = arr.slice();   // 函数式编程的思想,不要对外部的变量进行改变。
  let n = newArray.length;
   for(let i = 0; i< n -1; i++) {
        for(let j =0; j< n - i; j++) {// 每一趟内部进行两两比较,而比较的次数就是 n -i 

            // 如果顺序错误,就交换它们的位置
             if(newArray[j] < newArray[j + 1]) {
                 let temp = newArray[j];
                 newArray[j] = newArray[j+1];
                 newArray[j+1] = temp;
             }
     }
  }
  return newArray;
}

  把 我们上面排序的5个数放入数组中,然后传入到bubbleSort 函数中

  let array = [12, 35, 99, 8, 100];
 console.log("排序前的数组:" + array);
 console.log("排序后的数组:" +bubbleSort(array));

 

posted @ 2017-11-13 18:04  SamWeb  阅读(682)  评论(0)    收藏  举报