js 冒泡排序与快速排序

刚好今晚看了js的冒泡排序跟快速排序,趁着还没忘记先记下来。

1. 冒泡排序:遍历数组,每个元素都与后一个元素比较,如果大于下一个元素,则两个元素位置调换。否则的话当前元素再与下下个元素比较,一直到 跟后面的元素都比较完。这个是升序的排序,降序则相反。

 1 var arr = [1,23,4,12,32,455,122,3,43,13];
 2 
 3 function bubbleSort(arr) {
 4     for (let i = 0; i < arr.length - 1; i++) {
 5         for(let j = i + 1; j < arr.length; j++) {
 6         if (arr[i] > arr[j]) {
 7                 let maxVal = arr[i];
 8                 arr[i] = arr[j];
 9         arr[j] = maxVal;
10         }
11     }
12     }
13     return arr;
14 }
15 console.log('bubble sort: ', bubbleSort(arr));          

2. 快速排序:是对冒泡排序的一种改进。

  • 先从数组里面选出一个数,一般都是第一个数即array[0],然后再将其他数据分成两个数组,小于array[0]的放在左边数组,大于的放在右边数组。
  • 对两个数组进行递归排序(按照1步骤),直到数组长度 <= 1,跳出递归(这个是主要条件,不然会陷入死循环)。
  • 将数据 concat 成一个最终的数组。这个是升序的排序,降序则相反。
 1 var arr = [1,23,4,12,32,455,122,3,43,13];
 2 function quickSort(arr) {
 3     if (arr.length <= 1) {
 4         // 注意加这个条件,不然死循环
 5         return arr;
 6     }
 7     var reference = arr[0];
 8     var leftList = [];
 9     var rightList = [];
10     arr.forEach(item => {
11         if (item > reference) {
12         rightList.push(item);
13     } else if (item < reference) {
14         leftList.push(item);
15     }
16     })
17 
18     return quickSort(leftList).concat(reference, quickSort(rightList));
19 }
20 console.log('quick sort: ' , quickSort(arr))        

猜你喜欢

转载自www.cnblogs.com/l-c-blog/p/10582185.html
今日推荐