今天我们来谈谈用JS实现冒泡排序,希望对大家有所帮助:
1.冒泡排序
思路:a)比较两个相邻的元素,如果后一个比前一个大,则交换位置
b) 第一轮的时候最后一个元素应该是最大的一个
c) 按照第一步的方法进行两个相邻的元素的比较,由于最后一个元素已经是最大的了,所以最后一个元素不用比较。
代码:
function sort(element){
for(var i = 0;i<element.length-1;i++) {
console.log("i="+element[i])
for(var j = 0;j<element.length-i-1;j++){
console.log("j="+element[j]);
console.log("j+1="+element[j+1]);
if(element[j]>element[j+1]){
//把大的数字放到后面
var swap = element[j];
element[j] = element[j+1];
element[j+1] = swap;
}
}
console.log(element);
}
}
var element = [3,5,1,2,7,8,4,5,3,4];
//console.log("before:"+element);[3,5,1,2,7,8,4,5,3,4];
sort(element);
//console.log("after:"+element);[1, 2, 3, 3, 4, 4, 5, 5, 7, 8]
看看打印的结果:
......中间部分省略直接看后面的结果
看到打印的结果,想必大家已经发现,在第一个for循环一个数字的同时,进入到第二个循环,改变数组数字的顺序,将大的数字放在后面,直到遍历完发现没有小的数字在后面的时候,再次进入第一个循环,遍历后面的数字,以此类推,直到遍历完所有的数字,两次遍历结束;
2.快速排序
在看完上面的东西之后,不知道大家有没有发现在实际的工作中如果数据量过大,数组比较复杂,通过两次遍历,同时会带来性能上的问题,不用慌,我们还可以用快速排序的方法进行解决,快速排序对冒泡排序的一种改进,让我们来看看
思路:
第一次排序的时候将数据分成两个部分,一部分比另外一部分所有的数据都要小,然后递归调用,在两边都实行快速排序。
代码:
<script>
function quickSort(elements){
console.log("元素"+elements);
console.log("长度"+elements.length);
if(elements.length<=1){
return elements;
}
var index = Math.floor(elements.length/2);
//console.log(index);//5->5->4->3->2->2->1
var pivot = elements.splice(index,1)[0];//获取删除的数字
//console.log("pivot="+pivot);//1-8-7-3-6-4.4-5.5
var arrLeft = [];
var arrRight = [];
for(var i = 0;i<elements.length;i++){
if(elements[i] < pivot){
arrLeft.push(elements[i]);
console.log("arrLeft="+arrLeft);
}else{
arrRight.push(elements[i]);
console.log("arrright="+arrRight)
}
}
return quickSort(arrLeft).concat([pivot],quickSort(arrRight));
}
var elements = [4,5,2,3,7,1,8,9,6,4.4,5.5];
console.log(quickSort(elements));//[1, 2, 3, 4, 4.4, 5, 5.5, 6, 7, 8, 9]
</script>