javascript中的冒泡排序和选择排序

**

1、选择排序(打擂台法)

**

​ 算法思想:在数组中先选择一个位置(第一个位置)我们把它叫做a[0],用这个位置的数与数组中的其他数进行一一比较比较,如果有数比a[0]大,就交换位置,把更大的数放入a[0],当遍历完数组一遍之后,a[0]就存储了数组中最大的数,同样的,再使用a[1]与数组后面的数比较,找出第二大的数放入a[1],通过一次次的比较,最终让数组从大到小排序。

//选择排序之升序:function selectSortAsc(arr1){for(var i=0;i<arr1.length-1;i++){for(var j=i+1;j<arr1.length;j++){if(arr1[i]>arr1[j]){var tempt=arr1[i];

​                arr1[i]=arr1[j];

​                arr1[j]=tempt;}}}return arr1;}alert(selectSortAsc([10,20,3,4,1,45,34,90]));//选择排序之降序:function selectSortDesc(arr1){for(var i=0;i<arr1.length-1;i++){for(var j=i+1;j<arr1.length;j++){if(arr1[i]<arr1[j]){var tempt=arr1[i];

​                arr1[i]=arr1[j];

​                arr1[j]=tempt;}}}return arr1;}alert(selectSortDesc([10,20,3,4,1,45,34,90]));

**

2、冒泡排序:

**

​ 规则:前后两个数进行比较,如果符合交换条件,就交换位置,

​ 规律:冒泡排序每一轮都可以找出一个较大的数,放在正确的位置。

比较轮数=数组长度-1;
每一轮比比较的次数=数组长度-当前轮数;

​ 冒泡排序使用的是两个数之间比较,通过不断地交换位置,把最大或者是最小的数放到最后的位置,让后通过一样的方式把第二大的数放到倒数第二的位置,最终实实现从小到大或者从大到小的排序:
举例说明

把 9, 8, 7, 6, 5, 4从大到小排序:

​ 第一轮:五次

​ 9, 8, 7, 6, 5, 4

​ 8, 9, 7, 6, 5, 4

​ 8, 7, 9, 6, 5, 4

​ 8, 7, 6, 9, 5, 4

​ 8, 7, 6, 5, 9, 4

​ 8, 7, 6, 5, 4, 9

​ 第二轮:四次

​ 8, 7, 6, 5, 4

​ 7, 8, 6, 5, 4

​ 7, 6, 8, 5, 4

​ 7, 6, 5, 8, 4

​ 7, 6, 5, 4, 8

​ 第三轮:三次

​ 7, 6, 5, 4

​ 6, 7, 5, 4

​ 6, 5, 7, 4

​ 6, 5, 4, 7

​ 第四轮:两次

​ 6, 5, 4

​ 5, 6, 4

​ 5, 4, 6

​ 第五轮:一次

​ 5, 4

​ 4, 5

通过以上的例子,我们可以和很好的理解冒泡排序的思想,下面让我们来看看它的代码实现

var arr1 = [9, 8, 7, 6, 5, 4]; //从小到大//冒泡排序的升序function bubbleSortAsc(arr){for (var i = 0; i < arr.length - 1; i++) {//每一轮比较的次数for (var j = 0; j < arr.length - (i + 1); j++) {if (arr[j] > arr[j + 1]) {//交换两个数位置var tmp = arr[j];

​            arr[j] = arr[j + 1];

​            arr[j + 1] = tmp;}}}return arr;}//冒泡排序的降序function bubbleSortDesc(arr){for (var i = 0; i < arr.length - 1; i++) {//每一轮比较的次数for (var j = 0; j < arr.length - (i + 1); j++) {if (arr[j] < arr[j + 1]) {//交换两个数位置var tmp = arr[j];

​            arr[j] = arr[j + 1];

​            arr[j + 1] = tmp;}}}return arr;}alert(bubbleSortAsc(arr1));alert(bubbleSortDesc(arr1));
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值