2017.9.24排序算法的总结——冒泡排序、插入排序和选择排序

复习排序算法,首先最最最基础的就是冒泡排序和插入排序了,而且这个也会经常在面试中被问到,在此做个总结

冒泡排序

比较相邻的元素。如果第一个比第二个大,就交换他们两个。

对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。

针对所有的元素重复以上的步骤,除了最后一个。

持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

JavaScript实现如下:

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;
}

插入排序

个人理解,无非就是一个数组,分成两个部分,一部分是有顺序的,一部分是没有顺序的(开始的时候的话,将第一个元素看成是有顺序的),然后提出无顺序的元素和有顺序的部分做比较,然后在合适的地方插入

JavaScript实现:

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;
}

选择排序

选择排序,个人理解也是分成两部分,一部分是有序的,一部分是无顺序的,一开始都是无顺序的,遍历完整个数组,找出最小(大)的那个元素,插入有序的其中,然后再接着查找次小(大)的那个数插入有序的中。
JavaScript实现代码:

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;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 概述:排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    每天刷两次牙阅读 9,086评论 0 15
  • 概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    蚁前阅读 10,589评论 0 52
  • Ba la la la ~ 读者朋友们,你们好啊,又到了冷锋时间,话不多说,发车! 1.冒泡排序(Bub...
    王饱饱阅读 5,766评论 0 7
  • 果断我是已经长大的人 然而我必须要学会面对选择面对成长学会安顿情绪 同样的一件事 以前我可能爱作死爱折腾 爱找到一...
    2b80048c383c阅读 1,280评论 0 0
  • 今天早上醒来后已经六点二十四了,我还不慌不忙,因为我把时间记错了,我以为是七点到那儿吃饭,没想到他们都准备好了,过...
    百合花张馨文阅读 3,696评论 0 0