前端排序算法

来源:互联网 发布:中序遍历递归算法 编辑:程序博客网 时间:2024/05/16 16:00

冒泡排序

依次比较相邻的两个元素,如果后一个小于前一个,则交换,这样从头到尾一次,就将最大的放到了末尾。

从头到尾再来一次,由于每进行一轮,最后的都已经是最大的了,因此后一轮需要比较次数可以比上一次少一个。虽然你还是可以让他从头到尾来比较,但是后面的比较是没有意义的无用功,为了效率,你应该对代码进行优化。

图片演示如下:


代码实现:

function bubbleSort(arr) {

   var len = arr.length;

   for (var i = 0; i< len - 1; i++) {

       for (var j = 0; j < len - 1 - i; j++){

           if (arr[j]> arr[j+1]) {        // 相邻元素两两对比

               var temp = arr[j+1];        // 元素交换

               arr[j+1] = arr[j];

               arr[j] = temp;

           }

       }

   }

   return arr;

}

选择排序

选择排序我觉得是最简单的了,大一学VB的时候,就只记住了这个排序方法,原理非常简单:每次都找一个最大或者最小的排在开始即可。

首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置 
再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。 
重复第二步,直到所有元素均排序完毕。 
动图演示:

代码演示:

function selectionSort(arr) {

   var len = arr.length;

   var minIndex, temp;

   for (var i = 0; i< len - 1; i++) {

       minIndex = i;

       for (var j = i + 1; j < len; j++) {

           if (arr[j]< arr[minIndex]) {     // 寻找最小的数

               minIndex = j;                // 将最小数的索引保存

           }

       }

       temp = arr[i];

       arr[i] = arr[minIndex];

       arr[minIndex] = temp;

   }

   return arr;

}

插入排序

插入排序也比较简单。就像打扑克一样,依次将拿到的元素插入到正确的位置即可。

1.将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。 
2.从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。)

动图演示:


代码示例:

function insertionSort(arr) {

   var len = arr.length;

   var preIndex, current;

   for (var i = 1; i< len; i++) {

       preIndex = i - 1;

       current = arr[i];

       while(preIndex >= 0&& arr[preIndex] > current){

           arr[preIndex+1] = arr[preIndex];

           preIndex--;

       }

       arr[preIndex+1] = current;

   }

   return arr;

}

原文地址https://www.cnblogs.com/lindazhong/p/6669013.html
原创粉丝点击