您的位置:首页 > 其它

排序算法之冒泡排序

2015-12-30 22:24 232 查看
冒泡排序应该是大家比较熟悉的排序方法之一,但是确是一个效率不是太高的排序算法,特别是面对大数据集的时候。

原理是临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换,这样一趟过去后,最大或最小的数字被交换到了最后一位,然后再从头开始进行两两比较交换,直到倒数第二位时结束,其余类似看例子

例子为从小到大排序,

原始待排序数组| 6 | 2 | 4 | 1 | 5 | 9 |

第一趟排序(外循环)

第一次两两比较6 > 2交换(内循环)

交换前状态| 6 | 2 | 4 | 1 | 5 | 9 |

交换后状态| 2 | 6 | 4 | 1 | 5 | 9 |

第二次两两比较,6 > 4交换

交换前状态| 2 | 6 | 4 | 1 | 5 | 9 |

交换后状态| 2 | 4 | 6 | 1 | 5 | 9 |

第三次两两比较,6 > 1交换

交换前状态| 2 | 4 | 6 | 1 | 5 | 9 |

交换后状态| 2 | 4 | 1 | 6 | 5 | 9 |

第四次两两比较,6 > 5交换

交换前状态| 2 | 4 | 1 | 6 | 5 | 9 |

交换后状态| 2 | 4 | 1 | 5 | 6 | 9 |

第五次两两比较,6 < 9不交换

交换前状态| 2 | 4 | 1 | 5 | 6 | 9 |

交换后状态| 2 | 4 | 1 | 5 | 6 | 9 |

第二趟排序(外循环)

第一次两两比较2 < 4不交换

交换前状态| 2 | 4 | 1 | 5 | 6 | 9 |

交换后状态| 2 | 4 | 1 | 5 | 6 | 9 |

第二次两两比较,4 > 1交换

交换前状态| 2 | 4 | 1 | 5 | 6 | 9 |
交换后状态| 2 | 1 | 4 | 5 | 6 | 9 |

第三次两两比较,4 < 5不交换

交换前状态| 2 | 1 | 4 | 5 | 6 | 9 |
交换后状态| 2 | 1 | 4 | 5 | 6 | 9 |

第四次两两比较,5 < 6不交换

交换前状态| 2 | 1 | 4 | 5 | 6 | 9 |

交换后状态| 2 | 1 | 4 | 5 | 6 | 9 |

第三趟排序(外循环)

第一次两两比较2 > 1交换

交换后状态| 2 | 1 | 4 | 5 | 6 | 9 |

交换后状态| 1 | 2 | 4 | 5 | 6 | 9 |

第二次两两比较,2 < 4不交换

交换后状态| 1 | 2 | 4 | 5 | 6 | 9 |
交换后状态| 1 | 2 | 4 | 5 | 6 | 9 |

第三次两两比较,4 < 5不交换

交换后状态| 1 | 2 | 4 | 5 | 6 | 9 |
交换后状态| 1 | 2 | 4 | 5 | 6 | 9 |

第四趟排序(外循环)无交换

第五趟排序(外循环)无交换

[b][b][/b][/b]

排序完毕,输出最终结果1 2 4 5 6 9

javascript实现的的代码如下:

<html>
<head>
<title>Date Example</title>
</head>
<body>
<div id="content"></div>

<script type="text/javascript">
function CArray (numElements){
this.dataStore = [];
this.pos = 0;
this.numElements = numElements;

this.insert = function (element){
this.dataStore[this.pos++] = element;
};

this.toString = function (){
var restr = "";
for (var index = 0; index < this.dataStore.length; ++index){
restr += this.dataStore[index] + " ";
if (index > 0 && index % 10 == 0){
restr += "\n";
}

}
return restr;
};

this.clear = function (){
for (var index = 0; index < this.dataStore.length; ++index){
this.dataStore[index] = 0;
}
};

this.setData = function (){
for (var index = 0; index < this.numElements; ++index){
this.dataStore[index] = Math.floor(Math.random() * (this.numElements + 1));
}
};

this.swap = function (arr, index1, index2){
var tempData = arr[index1];
arr[index1] = arr[index2];
arr[index2] = tempData;
};

//   冒泡排序
this.bubbleSort = function (){

var numLength = this.numElements;
for (var outer = numLength; outer >= 2; --outer){
for (var inner = 0; inner <= (numLength -1); ++inner){
if (this.dataStore[inner] > this.dataStore[inner + 1]){
this.swap(this.dataStore, inner, (inner + 1));
}
}

console.log(this.toString());     //   查看排序过程
}
};
}

var numElements = 10;
var myNums = new CArray(numElements);
myNums.setData();
console.log(myNums.toString());
myNums.bubbleSort();
console.log(myNums.toString());
</script>
</body>
</html>


参考:http://www.cnblogs.com/kkun/archive/2011/11/23/2260280.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: