数组Array的排序sort


    JavaScript中的Array对象有自己的排序方法sort(),对数组中的数据项进行排序,但是有时候排序结果不尽如人意,比如

var arr = [12, 1, 2, 21, 3];
arr.sort();
alert(arr); 

    得到的结果为  1,12,2,21,3


    这是为什么呢?因为JavaScript中的排序默认按照ascii字符代码进行排序,也就是说,数字也是按照它们的字符串形式排序的。

var strArr = ['a', '2', 'a2', '2a', 'b', '3'];
alert(strArr.sort());


    这个得到什么结果呢? 2,2a,3,a,a2,b


    因为 数字的ascii码比字母的小,所以数字排在前面,字母排在后面。


    如果想继续让上面的数组arr按照数字进行排序,怎么处理呢?

    JavaScript给我们提供了一个入口,可以给sort() 方法传递一个参数,即比较函数,来告诉排序算法值与值之间是大于、小于还是等于关系。


     比较函数是有着特定算法的函数。

function compare_fn(value1, value2) {
	if (value1 < value2) {
		return -1;
	} else if (value1 > value2) {
		return 1;
	} else {
		return 0;
	}
}


    将比较函数 compare_fn 传递给sort,再进行排序,然后输出

arr.sort(compare_fn);
alert(arr);

    得到 1, 2, 3, 12, 21


JavaScript中Array对象的sort方法返回值的定义为

负值 : 如果所传递的第一个参数比第二个参数小

零   : 两个值相等

正值 : 如果第一个参数比第二个参数大


    上面的比较函数还可以简写为

function compare_fn(value1, value2) {
	return value1 - value2;
}

    这个比较的为升序排列


    如果想降序排列,直接改变上面的返回值的符号就可以了,给所有返回均取反。

    对简写的比较函数就是

function compare_fn(value1, value2) {
	return -(value1 - value2);
}

    

    即

function compare_fn(value1, value2) {
	return value2 - value1;
}

   

    简单的记法就是:顺序升;逆序降





  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
二维数组排序可以使用多种算法,比如冒泡排序、选择排序、插入排序等。下面以冒泡排序为例介绍一下二维数组排序过程: 冒泡排序是一种简单的排序算法,它通过不断比较相邻元素的大小并交换位置来实现排序。对于二维数组,我们可以按照某一列或某一行的元素进行排序。 以下是二维数组冒泡排序的步骤: 1. 遍历二维数组的每一行,从第一行开始。 2. 在每一行中,比较相邻的两个元素的大小,如果前一个元素大于后一个元素,则交换它们的位置。 3. 继续遍历下一行,重复步骤2,直到遍历完所有行。 4. 重复步骤1~3,直到所有元素都按照要求排序。 下面是一个示例代码,演示了如何对二维数组进行冒泡排序: ```python def bubble_sort_2d_array(arr): rows = len(arr) cols = len(arr[0]) for i in range(rows): for j in range(cols-1): for k in range(cols-j-1): if arr[i][k] > arr[i][k+1]: arr[i][k], arr[i][k+1] = arr[i][k+1], arr[i][k] return arr # 示例二维数组 array = [[5, 2, 9], [1, 4, 3], [8, 6, 7]] # 调用冒泡排序函数 sorted_array = bubble_sort_2d_array(array) # 打印排序后的二维数组 for row in sorted_array: print(row) ``` 以上代码中,我们定义了一个`bubble_sort_2d_array`函数来实现二维数组的冒泡排序。通过嵌套的循环遍历每一行,并在每一行中进行相邻元素的比较和交换。最后打印出排序后的二维数组

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值