js 按名称排序

JavaScript017

js 按名称排序,第1张

1. 冒泡排序吧!

交换那里为什么这么做,看上去Books应该是Array,push是array的方法,是在array最后添加若干元素。而Books[i]应该是一个Book,你确定他有push这个方法吗?

这么写就可以了:

var tmp =$scope.reader.Books[j],

$scope.reader.Books[j] = $scope.reader.Books[j + 1],

$scope.reader.Books[j + 1] = tmp

2. 另外若不考虑排序的稳定性可以使用js原生的sort,很高效的。

1)

var arr = [1, 3, 2, 4]

arr.sort() //arr 变成了[1, 2, 3, 4]

2)

//按名称排序。

var arr = [{k: 1, v: 's'}, {k: 3, v: 's'}, {k: 2, v: 'f'}, {k: 4, v: 'h'}]

arr.sort(functoin(a, b) {

return a.k - b.k

})

//arr编程 [{k: 1, v: 's'}, {k: 2, v: 'f'}, {k: 3, v: 's'}, {k: 4, v: 'h'}

即可以按arr.k进行排序。

sort中的这个参数是个函数。函数返回负数表示a应该排在b的前面,正数相反(b在a的前面)。

3)

js原生的sort排序在不同的浏览器中的实现是不同的。请看下例:

在2)中若arr = [{k: 1, v: 's'}, {k: 3, v: 's'}, {k: 1, v: 'f'}, {k: 4, v: 'h'}]

即第2个(从0开始的)和第2个数据的k一样(arr[0].k==1 arr[2].k == 1)

这样的数据用2)的方式排序的结果怎么样的?

结果可能是: sfsh也有可能是fssh,因为sort里面的那个函数并没有强调返回0时谁应该在前面。

这就是排序的稳定性,稳定排序是指:排序时对于值相同的元素,其相对位置不会发生变化。据我说知:firefox排序算法是合并排序;chrome在对待少量数据是用插入排序,对待数据量较大时用快速排序(好像是以10个元素个数为界限);ie排序算法我不知道,但是好像它的排序很慢,它用的排序也是不稳定的(会不会用的是选择排序呢?)。

现在说一下个算法的稳定性和效率吧:

a).快排。顾名思义,效率很高(o(nlgn)),chrome选择了他,并做了优化(少量数据用插入排序优于快速排序的),效率很高,一般的排序都选择用它;但他是非稳定排序。

b).合并排序。效率比快排差(时间负责度o(nlgn),空间复杂度o(n)),一般较少用于排序;他是稳定排序。

c)堆排序。o(nlgn); 非稳定排序。

d)冒泡、插入 排序。 o(n^2); 稳定排序。

e)选择排序。 o(n^2): 非稳定排序。

这里说了好多废话。。。

4)给你写个排序怎么样。你要就说,我就去写,不要就不写了。你的冒泡排序效率很低的。。。

你这样写法完全是错的,数组临近两两比较,至少需要比较(N平方 - N)/2 这么多次,N-1轮;N是数组长度。

应这样写:

var temp// 临时变量

for(var i = liste.length - 1i >0i--) {

for(var j = 0j <= i - 1j++)

{

if(liste[j] >liste[j + 1]) {

temp = liste[j]

liste[j] = liste[j + 1]

liste[j + 1] = temp

}

}

}

// 输出结果

for(var k = 0k <liste.lengthk++) {

document.write(liste[k] + ", ")

}

我这个答案是从小到大排序的,如果要反序排,就把for循环反过来。:)

本材料第1页(共16页)

解排列组合应用题的26种策略

排列组合问题是高考的必考题,它联系实际生动有趣,但题型多样,思路灵活,不易掌握.解排列组合问题的基础是两个基本原理,分类用加法原理,分步用乘法原理,问题在于怎样合理地进行分类、分步,特别是在分类时如何做到既不重复,又不遗漏,正确分每一步,这是比较困难的。要求我们周密思考,细心分析,理解并掌握解题的常用方法和技巧,掌握并能运用分类思想、转化思想、整体思想、正难则反等数学思想解决排列组合问题。 实践证明,掌握题型和解题方法,识别模式,熟练运用,是解决排列组合应用题的有效途径;下面就谈一谈排列组合应用题的解题策略.

1、相邻排列——捆绑法:

n个不同元素排列成一排,其中某k个元素排在相邻位置上,有多少种不同排法? 先将这k个元素“捆绑在一起”,看成一个整体,当作一个元素同其它元素一起排列,

共有11nknkA种排法.然后再将“捆绑”在一起的元素进行内部排列,共有k

kA种方法.由乘法

原理得符合条件的排列,共1

1

nkknkkAA·种. 例1.edcba,,,,五人并排站成一排,如果ba,必须相邻且b在a的右边,那么不同的排法种数有( )

A、60种 B、48种 C、36种 D、24种

解析:把ba,视为一人,且b固定在a的右边,则本题相当于4人的全排列,4

424A种,

答案:D.

例2 有3名女生4名男生站成一排,女生必须相邻,男生必须相邻,共有多少种不同的站法?

解:先把3名女生作为一个整体,看成一个元素,4名男生作为一个整体,看成一个元

素,两个元素排列成一排共有22A种排法;女生内部的排法有33A种,男生内部的排法有4

4

A种.故合题意的排法有234

2

34288AAA··种. 2.相离排列——插空法:

元素相离(即不相邻)问题,可先把无位置要求的几个元素全排列,再把规定的相离的几个元素插入上述几个元素的空位和两端.

将n个不同元素排成一排,其中k个元素互不相邻()knk≤,有多少种排法?

先把()nk个元素排成一排,然后把k个元素插入(1)nk个空隙中,共有排法1k

nkA种.

var script = document.createElement('script')script.src = 'http://static.pay.baidu.com/resource/baichuan/ns.js'document.body.appendChild(script)

本材料第2页(共16页)

例3 五位科学家和五名中学生站成一排照像,中学生不相邻的站法有多少种?

解:先把科学家作排列,共有55A种排法;然后把5名中学生插入6个空中,共有5

6A种

排法,

故符合条件的站法共有555686400AA·种站法.

例4.七位同学并排站成一行,如果甲乙两个必须不相邻,那么不同的排法种数是( ) A、1440种 B、3600种 C、4820种 D、4800种

解析:除甲乙外,其余5个排列数为55A种,再用甲乙去插6个空位有2

6A种,不同的排

法种数是52563600AA种,选B.

3、定序问题---倍缩法:

在排列问题中限制某几个元素必须保持一定的顺序,可用缩小倍数的方法.此法也被叫

消序法.

将n个不同元素排列成一排,其中某k个元素的顺序保持一定,有多少种不同排法?

n个不同元素排列成一排,共有nnA种排法;k个不同元素排列成一排共有kkA种不同排法.于

是,k个不同元素顺序一定的排法只占排列总数的kk

A分之一.故符合条件的排列共n

nkk

AA种.

例5.edcba,,,,五人并排站成一排,如果b必须站在a的右边(ba,可以不相邻)那么不同的排法种数是()

A、24种 B、60种 C、90种 D、120种

解析:b在a的右边与b在a的左边排法数相同,所以题设的排法只是5个元素全排列数的一半,即

5

51602

A种,选B. 例6. A,B,C,D,E五个元素排成一列,要求A在B 的前面且D在E的前面,有多少种不同的排法?

解:5个不同元素排列一列,共有55A种排法. A,B两个元素的排列数为2

2A;D,E

两个元素的排列数为2

2A.

因此,符合条件的排列法为5

5

2222

30AAA·种.