码迷,mamicode.com
首页 > 编程语言 > 详细

排序算法之一冒泡排序

时间:2018-07-30 15:39:04      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:之一   内存   while   设备   col   算法   als   function   算法思想   

排序算法的相关概念

1、内部排序和外部排序

  内部排序:整个排序过程完全在内存中进行;

  外部排序:排序需要借助外部存储设备才能完成。

2、算法的稳定性

  相同关键字的领先关系在排序过程中不发生变活,则所用的排序方法是稳定的。

算法思想

从上往下扫描整个待排序数组,若相邻的两个数逆序,则交换位置(让较大的数沉下去,让较小的数冒泡上来)。

稳定性:稳定,平均算法复杂度:0(n2

function bubbleSort(arr,len){
    //冒泡过程需要要进行n-1次
    for(var i = 1;i <= len -1;i++){
        //第i次进行后最后i项排好,只需要比较前len - i项
        for(var j = 1;j <= len - i;j++){
            //若相邻两项逆序,则交换位置
            if(arr[j-1] >arr[j]){
                var temp = arr[j - 1];
                arr[j - 1] = arr[j];
                arr[j] = temp;
            }
        }
    }
    return arr;
}

优化冒泡排序

设置一个flag,每一趟将flag设置成false,如果这一趟发生了交换,则将flag设置为true。如果有一趟没有发生交换,说明排序已经完成。冒泡过程最多进行 n-1 次。

function bubbleSort(arr,len){
    var flag = true;
    for(var i = 1;i <= len -1 && flag;i++){
        flag = false;
        for(var j = 1;j <= len - i;j++){
            //若相邻两项逆序,则交换位置,并将flag设置为true
            if(arr[j-1] >arr[j]){
                var temp = arr[j - 1];
                arr[j - 1] = arr[j];
                arr[j] = temp;
                flag = true;
            }
        }
    }
    return arr;
}

再一次优化

设置一个flag,每一趟将flag设置为0,若某一趟在某一个位置发生了交换,就将flag立在这个位置,说明这个位置以后的都已经排好了,只需要对这个位置之前的数进行排序。

function bubbleSort(arr,len){
    var flag = len,n = flag;
    while(flag > 0){
        n = flag;
        flag = 0;
        for(var j = 1;j < n;j++){
            if(arr[j-1] >arr[j]){
                var temp = arr[j - 1];
                arr[j - 1] = arr[j];
                arr[j] = temp;
                flag = j;
            }
        }
    }
    return arr;
}

 

排序算法之一冒泡排序

标签:之一   内存   while   设备   col   算法   als   function   算法思想   

原文地址:https://www.cnblogs.com/3yleaves/p/9390630.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!