排序算法之一冒泡排序
Posted 3yleaves
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序算法之一冒泡排序相关的知识,希望对你有一定的参考价值。
排序算法的相关概念
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;
}
以上是关于排序算法之一冒泡排序的主要内容,如果未能解决你的问题,请参考以下文章