导航:首页 > 方法技巧 > 如何判断排序的方法

如何判断排序的方法

发布时间:2022-09-08 11:48:27

1. Python判断列表是否已排序的各种方法及其性能分析

本文基于Python2.7语言,给出判断列表是否已排序的多种方法,并在作者的Windows XP主机(Pentium G630 2.7GHz主频2GB内存)上对比和分析其性能表现。
一. 问题提出
Haskell培训老师提出一个问题:如何判断列表是否已经排序?
排序与否实际只是相邻元素间的某种二元关系,即a->a->Bool。所以第一步可以把二元组列表找出来;第二步是把这个函数作用于每个元组,然后用and操作。老师给出的实现代码如下:
pair lst = zip lst ( tail lst )
sorted lst predict = and [ predict x y | (x,y) <- pair lst]

Haskell中,等号前面是函数的名称和参数,后面是函数的定义体。pair函数将列表lst错位一下(tail除去列表的第一个元素)后,和原列表在zip的作用下形成前后相邻元素二元组列表。predict函数接受两个数字,根据大小返回True或False。and对类型为[Bool]的列表中所有元素求与,其语义类似Python的all()函数。
随后,老师请大家思考性能问题。作者提出,若准确性要求不高,可生成三组随机数排序后作为下标,提取原列表相应的三组元素组成三个新的子列表("采样")。若判断三个子列表遵循同样的排序规则时,则认为原列表已排序。当列表很大且前段已排序时,选取适当数目的随机数,可在保障一定准确率的同时显着地降低运算规模。
此外,实际应用中还应考虑数据来源。例如,Python语言的os.listdir()方法在Windows系统中返回的列表条目满足字母序,在Linux系统中则返回乱序条目。因此,若判断系统平台(os.platform)为win32,则条目必然已经排序。
为对比验证随机采样方式的可行性,作者先在网上搜集判断列表排序的现有方法,

2. 如何判断数组的值是否按顺序排序

需求描述:从一组数组中找出一组按不同顺序排列的字符串的数组元素。假如有这样一个数组:

代码如下:

[ 'abcd', 'hello', 'bdca', 'olleh', 'cadb', 'nba', 'abn', 'abc' ]

需要找出的结果是:

代码如下:

[ 'abcd', 'bdca', 'cadb' ]

那么这里的关键点是判断一组字符串是否是否只是字符的顺序不同,只要解决整个关键点其他都好办了。

方法1:

代码如下:

var stringClassify = function( arr ){

var arrLength = arr.length,

obj = {},

i = 0,

num, item, name, firstItem, strLength;

for( ; i < arrLength; i++ ){

item = arr[i];

strLength = item.length;

num = 0;

// 将单个的字符转换成 Unicode 编码

// 对编码进行取和计算

for( j = 0; j < strLength; j++ ){

num += item.charCodeAt( j );

}

if( !firstItem ){

firstItem = item;

obj[ num ].push( item );

}

// 通过检测待添加的字符串的第一个字符是否

// 在另一个字符串中出现以避免将下面的情况

// [ 'ad', 'da', 'bc' ]

else if( ~firstItem.indexOf(item.charAt(0)) ){

obj[ num ].push( item );

}

}

for( name in obj ){

console.log( obj[name] );

}

};

方法1采用了遍历字符串中的每一个字符,然后将单个的字符转换成 Unicode 编码,对编码进行取和的计算,abcd 和 bdca 的编码和会是一致的。最后用编码和作为对象的 key 来保存编码和一致的字符串。

方法 1 需要注意的是,字符串“ad”和“bc”的 Unicode 编码和是一样的,此时需要多加一个判断,检测任意一个字符串中的第一个字符是否有出现在另一个字符串中出现过即可。

方法2:

代码如下:

var stringClassify = function(){

var arrLength = arr.length,

obj = {},

i = 0,

num, item, name, strArr, newStr;

for( ; i < arrLength; i++ ){

item = arr[i];

strArr = arr[i].split( '' );

strArr.sort();

newStr = strArr.join( '' );

if( !obj[newStr] ){

obj[ newStr ] = [];

}

obj[ newStr ].push( item );

}

for( name in obj ){

console.log( obj[name] );

}

};

方法2是将字符串转换成数组后再对数组进行 sort 排序,abcd 和 bdca 使用 sort 排序后会变成 abcd,将拍好序的字符串作为对象的 key 来保存排序一致的字符串。

其实两种方法的原理都是通过将字符转换成 Unicode 编码,只是方法1是显式的转换,而方法2中用到的 sort 排序,会隐式的转换。

3. Python判断列表是否已排序的各种方法及其性能

本节判断列表排序的函数名格式为IsListSorted_XXX()。为简洁起见,除代码片段及其输出外,一律以_XXX()指代。
2.1 guess
def IsListSorted_guess(lst):
listLen = len(lst) if listLen <= 1: return True

#由首个元素和末尾元素猜测可能的排序规则
if lst[0] == lst[-1]: #列表元素相同
for elem in lst: if elem != lst[0]: return False
elif lst[0] < lst[-1]: #列表元素升序
for i, elem in enumerate(lst[1:]): if elem < lst[i]: return False
else: #列表元素降序
for i, elem in enumerate(lst[1:]): if elem > lst[i]: return False

return True

_guess()是最通用的实现,几乎与语言无关。值得注意的是,该函数内会猜测给定列表可能的排序规则,因此无需外部调用者指明排序规则。
2.2 sorted
def IsListSorted_sorted(lst):
return sorted(lst) == lst or sorted(lst, reverse=True) == lst

_sorted()使用Python内置函数sorted()。由于sorted()会对未排序的列表排序,_sorted()函数主要适用于已排序列表。
若想判断列表未排序后再对其排序,不如直接调用列表的sort()方法,因为该方法内部会判断列表是否排序。对于已排序列表,该方法的时间复杂度为线性阶O(n)——判断为O(n)而排序为O(nlgn)。
2.3 for-loop
def IsListSorted_forloop(lst, key=lambda x, y: x <= y):
for i, elem in enumerate(lst[1:]): #注意,enumerate默认迭代下标从0开始
if not key(lst[i], elem): #if elem > lst[i]更快,但通用性差
return False
return True

无论列表是否已排序,本函数的时间复杂度均为线性阶O(n)。注意,参数key表明缺省的排序规则为升序。
2.4 all
def IsListSorted_allenumk(lst, key=lambda x, y: x <= y):
return all(key(lst[i], elem) for i, elem in enumerate(lst[1:]))import operatordef IsListSorted_allenumo(lst, oCmp=operator.le):
return all(oCmp(lst[i], elem) for i, elem in enumerate(lst[1:]))def IsListSorted_allenumd(lst):
return all((lst[i] <= elem) for i, elem in enumerate(lst[1:]))def IsListSorted_allxran(lst, key=lambda x,y: x <= y):
return all(key(lst[i],lst[i+1]) for i in xrange(len(lst)-1))def IsListSorted_allzip(lst, key=lambda x,y: x <= y):
from itertools import izip #Python 3中zip返回生成器(generator),而izip被废弃
return all(key(a, b) for (a, b) in izip(lst[:-1],lst[1:]))

lambda表达式与operator运算符速度相当,前者简单灵活,后者略为高效(实测并不一定)。但两者速度均不如列表元素直接比较(可能存在调用开销)。亦即,_allenumd()快于_allenumo()快于_allenumk()。
若使用lambda表达式指示排序规则,更改规则时只需要改变x和y之间的比较运算符;若使用operator模块指示排序规则,更改规则时需要改变对象比较方法。具体地,lt(x, y)等效于x < y,le(x, y)等效于x <= y,eq(x, y)等效于x == y,ne(x, y)等效于x != y,gt(x, y)等效于x > y,ge(x, y)等效于x >= y。例如,_allenumo()函数若要严格升序可设置oCmp=operator.lt。
此外,由all()函数的帮助信息可知,_allenumk()其实是_forloop()的等效形式。
2.5 numpy
def IsListSorted_numpy(arr, key=lambda dif: dif >= 0):
import numpy try: if arr.dtype.kind == 'u': #无符号整数数组执行np.diff时存在underflow风险
arr = numpy.int64(lst) except AttributeError: pass #无dtype属性,非数组
return (key(numpy.diff(arr))).all() #numpy.diff(x)返回相邻数组元素的差值构成的数组

NumPy是用于科学计算的Python基础包,可存储和处理大型矩阵。它包含一个强大的N维数组对象,比Python自身的嵌套列表结构(nested list structure)高效得多。第三节的实测数据表明,_numpy()处理大型列表时性能非常出色。
在Windows系统中可通过pip install numpy命令安装NumPy包,不建议登录官网下载文件自行安装。
2.6 rece
def IsListSorted_rece(iterable, key=lambda x, y: x <= y):
cmpFunc = lambda x, y: y if key(x, y) else float('inf') return rece(cmpFunc, iterable, .0) < float('inf')

rece实现是all实现的变体。累加器(accumulator)中仅存储最后一个检查的列表元素,或者Infinity(若任一元素小于前个元素值)。
前面2.1~2.5小节涉及下标操作的函数适用于列表等可迭代对象(Iterable)。对于通用迭代器(Iterator)对象,即可以作用于next()函数或方法的对象,可使用_rece()及后面除_rand()外各小节的函数。迭代器的计算是惰性的,只有在需要返回下一个数据时才会计算,以避免不必要的计算。而且,迭代器方式无需像列表那样切片为两个迭代对象。
2.7 imap
def IsListSorted_itermap(iterable, key=lambda x, y: x <= y):
from itertools import imap, tee
a, b = tee(iterable) #为单个iterable创建两个独立的iterator
next(b, None) return all(imap(key, a, b))

2.8 izip
def IsListSorted_iterzip(iterable, key=lambda x, y: x <= y):
from itertools import tee, izip
a, b = tee(iterable) next(b, None) return all(key(x, y) for x, y in izip(a, b))def pairwise(iterable):
from itertools import tee, izip
a, b = tee(iterable) next(b, None) return izip(a, b) #"s -> (s0,s1), (s1,s2), (s2, s3), ..."def IsListSorted_iterzipf(iterable, key=lambda x, y: x <= y):
return all(key(a, b) for a, b in pairwise(iterable))

第三节的实测数据表明,虽然存在外部函数调用,_iterzipf()却比_iterzip()略为高效。
2.9 fast
def IsListSorted_fastd(lst):
it = iter(lst) try:
prev = it.next() except StopIteration: return True
for cur in it: if prev > cur: return False
prev = cur return Truedef IsListSorted_fastk(lst, key=lambda x, y: x <= y):
it = iter(lst) try:
prev = it.next() except StopIteration: return True
for cur in it: if not key(prev, cur): return False
prev = cur return True

_fastd()和_fastk()是Stack Overflow网站回答里据称执行最快的。实测数据表明,在列表未排序时,它们的性能表现确实优异。
2.10 random
import randomdef IsListSorted_rand(lst, randNum=3, randLen=100):
listLen = len(lst) if listLen <= 1: return True

#由首个元素和末尾元素猜测可能的排序规则
if lst[0] < lst[-1]: #列表元素升序
key = lambda dif: dif >= 0
else: #列表元素降序或相等
key = lambda dif: dif <= 0

threshold, sortedFlag = 10000, True
import numpy if listLen <= threshold or listLen <= randLen*2 or not randNum: return (key(numpy.diff(numpy.array(lst)))).all() from random import sample for i in range(randNum):
sortedRandList = sorted(sample(xrange(listLen), randLen))
flag = (key(numpy.diff(numpy.array([lst[x] for x in sortedRandList])))).all()
sortedFlag = sortedFlag and flag return sortedFlag

_rand()借助随机采样降低运算规模,并融入其他判断函数的优点。例如,猜测列表可能的排序规则,并在随机采样不适合时使用相对快速的判断方式,如NumPy。
通过line_profiler分析可知,第20行和第21行与randLen有关,但两者耗时接近。因此randLen应小于listLen的一半,以抵消sorted开销。除内部限制外,用户可以调节随机序列个数和长度,如定制单个但较长的序列。
注意,_rand()不适用于存在微量异常数据的长列表。因为这些数据很可能被随机采样遗漏,从而影响判断结果的准确性。

4. 排序法都有哪些

一、插入排序(InsertionSort)
1.基本思想:
每次将一个待排序的数据元素,插入到前面已经排好序的数列中的适当位置,使数列依然有序;直到待排序数据元素全部插入完为止。
2.排序过程:
【示例】:
[初始关键字][49]38659776132749
J=2(38)[3849]659776132749
J=3(65)[384965]9776132749
J=4(97)[38496597]76132749
J=5(76)[3849657697]132749
J=6(13)[133849657697]2749
J=7(27)[13273849657697]49
J=8(49)[1327384949657697]

  1. ProcereInsertSort(VarR:FileType);
  2. //对R[1..N]按递增序进行插入排序,R[0]是监视哨//
  3. Begin
  4. forI:=2ToNDo//依次插入R[2],...,R[n]//
  5. begin
  6. R[0]:=R;J:=I-1;
  7. WhileR[0]<R[J]Do//查找R的插入位置//
  8. begin
  9. R[J+1]:=R[J];//将大于R的元素后移//
  10. J:=J-1
  11. end
  12. R[J+1]:=R[0];//插入R//
  13. end
  14. End;//InsertSort//
复制代码二、选择排序
1.基本思想:
每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。
2.排序过程:
【示例】:
初始关键字[4938659776132749]
第一趟排序后13[38659776492749]
第二趟排序后1327[659776493849]
第三趟排序后132738[9776496549]
第四趟排序后13273849[49976576]
第五趟排序后1327384949[979776]
第六趟排序后132738494976[7697]
第七趟排序后13273849497676[97]
最后排序结果1327384949767697
  1. ProcereSelectSort(VarR:FileType);//对R[1..N]进行直接选择排序//
  2. Begin
  3. forI:=1ToN-1Do//做N-1趟选择排序//
  4. begin
  5. K:=I;
  6. ForJ:=I+1ToNDo//在当前无序区R[I..N]中选最小的元素R[K]//
  7. begin
  8. IfR[J]<R[K]ThenK:=J
  9. end;
  10. IfK<>IThen//交换R和R[K]//
  11. beginTemp:=R;R:=R[K];R[K]:=Temp;end;
  12. end
  13. End;//SelectSort//
复制代码三、冒泡排序(BubbleSort)
1.基本思想:
两两比较待排序数据元素的大小,发现两个数据元素的次序相反时即进行交换,直到没有反序的数据元素为止。
2.排序过程:
设想被排序的数组R[1..N]垂直竖立,将每个数据元素看作有重量的气泡,根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R,凡扫描到违反本原则的轻气泡,就使其向上"漂浮",如此反复进行,直至最后任何两个气泡都是轻者在上,重者在下为止。
【示例】:
4913131313131313
3849272727272727
6538493838383838
9765384949494949
7697654949494949
1376976565656565
2727769776767676
4949497697979797
  1. ProcereBubbleSort(VarR:FileType)//从下往上扫描的起泡排序//
  2. Begin
  3. ForI:=1ToN-1Do//做N-1趟排序//
  4. begin
  5. NoSwap:=True;//置未排序的标志//
  6. ForJ:=N-1DownTo1Do//从底部往上扫描//
  7. begin
  8. IfR[J+1]<R[J]Then//交换元素//
  9. begin
  10. Temp:=R[J+1];R[J+1:=R[J];R[J]:=Temp;
  11. NoSwap:=False
  12. end;
  13. end;
  14. IfNoSwapThenReturn//本趟排序中未发生交换,则终止算法//
  15. end
  16. End;//BubbleSort//
复制代码四、快速排序(QuickSort)
1.基本思想:
在当前无序区R[1..H]中任取一个数据元素作为比较的"基准"(不妨记为X),用此基准将当前无序区划分为左右两个较小的无序区:R[1..I-1]和R[I+1..H],且左边的无序子区中数据元素均小于等于基准元素,右边的无序子区中数据元素均大于等于基准元素,而基准X则位于最终排序的位置上,即R[1..I-1]≤X.Key≤R[I+1..H](1≤I≤H),当R[1..I-1]和R[I+1..H]均非空时,分别对它们进行上述的划分过程,直至所有无序子区中的数据元素均已排序为止。
2.排序过程:
【示例】:
初始关键字[4938659776132749]
第一次交换后
[2738659776134949]
第二次交换后
[2738499776136549]
J向左扫描,位置不变,第三次交换后
[2738139776496549]
I向右扫描,位置不变,第四次交换后
[2738134976976549]
J向左扫描
[2738134976976549]
(一次划分过程)

初始关键字
[4938659776132749]
一趟排序之后
[273813]49[76976549]
二趟排序之后
[13]27[38]49[4965]76[97]
三趟排序之后1327384949[65]7697
最后的排序结果1327384949657697
各趟排序之后的状态
  1. ProcereParttion(VarR:FileType;L,H:Integer;VarI:Integer);
  2. //对无序区R[1,H]做划分,I给以出本次划分后已被定位的基准元素的位置//
  3. Begin
  4. I:=1;J:=H;X:=R;//初始化,X为基准//
  5. Repeat
  6. While(R[J]>=X)And(I<J)Do
  7. begin
  8. J:=J-1//从右向左扫描,查找第1个小于X的元素//
  9. IfI<JThen//已找到R[J]〈X//
  10. begin
  11. R:=R[J];//相当于交换R和R[J]//
  12. I:=I+1
  13. end;
  14. While(R<=X)And(I<J)Do
  15. I:=I+1//从左向右扫描,查找第1个大于X的元素///
  16. end;
  17. IfI<JThen//已找到R>X//
  18. begin R[J]:=R;//相当于交换R和R[J]//
  19. J:=J-1
  20. end
  21. UntilI=J;
  22. R:=X//基准X已被最终定位//
  23. End;//Parttion//
复制代码
  1. ProcereQuickSort(VarR:FileType;S,T:Integer);//对R[S..T]快速排序//
  2. Begin
  3. IfS<TThen//当R[S..T]为空或只有一个元素是无需排序//
  4. begin
  5. Partion(R,S,T,I);//对R[S..T]做划分//
  6. QuickSort(R,S,I-1);//递归处理左区间R[S,I-1]//
  7. QuickSort(R,I+1,T);//递归处理右区间R[I+1..T]//
  8. end;
  9. End;//QuickSort//
复制代码五、堆排序(HeapSort)
1.基本思想:
堆排序是一树形选择排序,在排序过程中,将R[1..N]看成是一颗完全二叉树的顺序存储结构,利用完全二叉树中双亲结点和孩子结点之间的内在关系来选择最小的元素。
2.堆的定义:N个元素的序列K1,K2,K3,...,Kn.称为堆,当且仅当该序列满足特性:
Ki≤K2iKi≤K2i+1(1≤I≤[N/2])


堆实质上是满足如下性质的完全二叉树:树中任一非叶子结点的关键字均大于等于其孩子结点的关键字。例如序列10,15,56,25,30,70就是一个堆,它对应的完全二叉树如上图所示。这种堆中根结点(称为堆顶)的关键字最小,我们把它称为小根堆。反之,若完全二叉树中任一非叶子结点的关键字均大于等于其孩子的关键字,则称之为大根堆。
3.排序过程:
堆排序正是利用小根堆(或大根堆)来选取当前无序区中关键字小(或最大)的记录实现排序的。我们不妨利用大根堆来排序。每一趟排序的基本操作是:将当前无序区调整为一个大根堆,选取关键字最大的堆顶记录,将它和无序区中的最后一个记录交换。这样,正好和直接选择排序相反,有序区是在原记录区的尾部形成并逐步向前扩大到整个记录区。
【示例】:对关键字序列42,13,91,23,24,16,05,88建堆
  1. ProcereSift(VarR:FileType;I,M:Integer);
  2. //在数组R[I..M]中调用R,使得以它为完全二叉树构成堆。事先已知其左、右子树(2I+1<=M时)均是堆//
  3. Begin
  4. X:=R;J:=2*I;//若J<=M,R[J]是R的左孩子//
  5. WhileJ<=MDo//若当前被调整结点R有左孩子R[J]//
  6. begin
  7. If(J<M)AndR[J].Key<R[J+1].KeyThen
  8. J:=J+1//令J指向关键字较大的右孩子//
  9. //J指向R的左、右孩子中关键字较大者//
  10. IfX.Key<R[J].KeyThen//孩子结点关键字较大//
  11. begin
  12. R:=R[J];//将R[J]换到双亲位置上//
  13. I:=J;J:=2*I//继续以R[J]为当前被调整结点往下层调整//
  14. end;
  15. Else
  16. Exit//调整完毕,退出循环//
  17. end
  18. R:=X;//将最初被调整的结点放入正确位置//
  19. End;//Sift//
复制代码
  1. ProcereHeapSort(VarR:FileType);//对R[1..N]进行堆排序//
  2. Begin
  3. ForI:=NDivDownto1Do//建立初始堆//
  4. Sift(R,I,N)
  5. ForI:=NDownto2do//进行N-1趟排序//
  6. begin
  7. T:=R[1];R[1]:=R;R:=T;//将当前堆顶记录和堆中最后一个记录交换//
  8. Sift(R,1,I-1)//将R[1..I-1]重成堆//
  9. end
  10. End;//HeapSort//
复制代码六、几种排序算法的比较和选择
1.选取排序方法需要考虑的因素:
(1)待排序的元素数目n;
(2)元素本身信息量的大小;
(3)关键字的结构及其分布情况;
(4)语言工具的条件,辅助空间的大小等。
2.小结:
(1)若n较小(n<=50),则可以采用直接插入排序或直接选择排序。由于直接插入排序所需的记录移动操作较直接选择排序多,因而当记录本身信息量较大时,用直接选择排序较好。
(2)若文件的初始状态已按关键字基本有序,则选用直接插入或冒泡排序为宜。
(3)若n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序、堆排序或归并排序。
快速排序是目前基于比较的内部排序法中被认为是最好的方法。
(4)在基于比较排序方法中,每次比较两个关键字的大小之后,仅仅出现两种可能的转移,因此可以用一棵二叉树来描述比较判定过程,由此可以证明:当文件的n个关键字随机分布时,任何借助于"比较"的排序算法,至少需要O(nlog2n)的时间。

这句话很重要它告诉我们自己写的算法是有改进到最优当然没有必要一直追求最优
(5)当记录本身信息量较大时,为避免耗费大量时间移动记录,可以用链表作为存储结构。

5. 小学语文排序题的方法

语文语句排序题难者难,易者易,有些小学生甚至依靠运气来做这类题。那怎样才能把难题变易题?下面是我为大家整理的关于小学语文排序题的 方法 ,希望对您有所帮助。欢迎大家阅读参考学习!

1小学语文排序题的方法

1、通读文字材料,细品语境。

大多题目都有语境,品味语境对确定解题思路起着重要的作用。前语境一般能提及或指示话题,还能确定语段的表述对象,并暗示着下文语意的表达方向。

2、认识语段的表达方式,明确表达顺序。

题目所给的语段和备选的 句子 都是认识的对象,并由此判断所用的表达方式。不同的表达方式一般使用不同的表达顺序。

记叙的表达方式一般使用时间顺序,这能使读者从时间变化的过程中明白事物或情节变化的脉络。时间顺序一般由表示时间的词语或暗含时间概念的词语表示,如果记叙事件的还要注意情节的先后,行踪的变化、动作行为的承接等。如:2005年全国卷Ⅲ的题目,从表达方式方面来说,语段运用了记叙和描写。语段中“出现”、“城中”、“走出”三个词就表明了“主人公”行动先后的时间顺序。

议论的表达方式一般使用逻辑顺序。逻辑顺序主要有:由概括到具体,由整体到局部,由主要到次要,由现象到本质,由原因到结果,又特点到用途等等。逻辑顺序常常以推理过程来表现,这就要求对语段的表意和层次进行细致分析;通常情况下,有相应的关联词为标志。

说明的表达方式一般采用空间顺序和事理顺序。在说明事物的形状、位置、大小、结构等时,使用由上到下、又下到上、由内到外、由表及里、由整体到局部的顺序,这样能够让读者有条理地了解对象的信息;在说明事物的功能、特点、关系、用途、程序等时,使用事理顺序,并要注意读者心理接受、感应的顺序。如:2008年全国卷Ⅱ的题目,所选的语段就是说明的表达方式。此语段围绕“动车组先进的计算机网络控制技术”这一对象,说明其功能和特点,就是按照事理顺序来表述的。

描写的表达方式一般采用空间顺序及事理顺序。采用空间顺序时,首先应选好立足点和观察点,使景物依次呈现;其次要注意观察和描写的角度,是仰视、平视,还是俯视?是远观还是近看?是由点到面还是由面到点?细究此类问题,就能把握写景语段的脉络。如:2005年全国卷Ⅱ的4题,就选了描写性的语段。此语段在写景时,虽然没有明显表示出空间的方位顺序,但是符合了描写的事理顺序。

3、句式结构要保持一致。

句式一致包括以下三方面内容:一是句型的选择要一致,二是相关语句中相对应的词语或 短语 的形式要保持一致,三是采用的修辞格要保持一致,这反映到句子的形式上,主要涉及排比、对偶这两种。如:2007年全国卷Ⅱ的4题,所给语段采用的句式很鲜明,且构成排比的辞格。结构一致表现为两种情况:一是句子内部相应成分要有一致的形式,二是几个句子中相应的部分要和谐一致。如2007年全国卷Ⅰ的4题,备选句①③⑤就属于这一方面。

4、巧抓备选句中的关键词。

第一类,代词。代词在句中起复指作用。当某句中出现代词时,要根据语意找准它所指代的对象,那么,这个对象所在的句子与代词所在的句子一般是紧密相承的。如:2005年全国卷Ⅱ的题目,其后语境使用第二人称;又如:2007年全国卷Ⅱ的题目,备选句中的b和d之间就有复指关系,其语意应是相承的。

第二类,连词,特别是关联词。这些词语在句中明确表示了其间的逻辑关系,对判断句子衔接是否连贯起着重要的作用。对于关联词来说,可以根据习惯搭配,直接判断句子的衔接。如:2006年全国卷Ⅰ的4题的④和①,关联词“看似”与“却”是固定搭配,表示转折关系,所以必须衔接起来。又如:2008年全国卷Ⅱ的4题中,①句中有“并”字,这就要考虑:谁能与它构 成语 意上的递进?这样就能解决此处的衔接问题。

第三类,具有关联性或指示性的词语。这些词语是在意思上有关联,有照应的。例如:时间上的照应、地点上的照应、方位上的照应、人物的关联、景物的关联等等。如:2005年全国卷Ⅲ的题目中,备选句中就有“到了”、“出现”、“城中”、“走出”这样在动作行为上有照应的词语。又如:2007年全国卷Ⅱ的题目,备选句中“美”与“迷人”是互相关联的。

第四类,要注意标点符号的使用。标点符号起着辅助表达的作用。在审题时,很有必要注意语段和备选句子里标点符号的使用情况。七种点号的使用,能为我们 提示语 意的表达层次,特别是分号和句号;常用的标号,能为我们提示词语的性质、成分之间的关系,特别是破折号。如:2007年全国卷Ⅱ的题目,所用语段中就出现了分号,表明是从三个方面来表示“小城”的。又如:2006年全国卷的题目,语段的第四空上是一个句号,表明前边的语意已经表达完整,其下转入另一意思的表达。这对解题也是有帮助的。

2小学语文句子排序题的做题方法

一、识文体

从文体来看,排序题的语段无外乎记叙、议论、说明和描写等四种表达类型。一般来说,叙述性语段以时间、空间和事情发展的客观过程为顺序;议论性语段按主次轻重、由表及里、由浅人深、由因及果、由现象到本质、由具体到概括、由感性到理性的逻辑顺序展开;说明性语段以由远及近、从外到内、由上到下的空间和先古后今的时间为序;描写性语段则按定点取景和移步换景的空间顺序展开。我们可以根据文体特点理清层次关系,从而恰当排序。

例1 依次填入下面一段文字横线处的语句,衔接最恰当的一组是

天鹅悠闲自在、无拘无束,它时而在水上邀游,————它似乎是很喜欢接近人的,只要它觉得我们不会伤害它。

①时而沿着水边,②回到有人的地方,③时而到岸旁嬉戏,④享受着与人相处的乐趣,⑤时而离开它的幽居,⑥藏到灯芯草丛中,

A.③①⑥⑤②④

B,①④⑤⑥③②

c.①②③⑥⑤④

D.③②①④⑤⑥

[解析] 这是——段描写性文字,描述天鹅在水、岸自由活动的情景。可以按照空间顺序排序:先写“水上”,再写“岸旁”,再写“沿着水边”,最后写“离开它的幽居”,即可以确定③①⑤的先后顺序;然后再按照逻辑关系,②和④都含有“人”,应紧承⑤;灯芯草是长在水边的一种多年生草本植物,故⑥紧承①。故答案为A

二、抓词语

语段中的某些词语往往是理清句子含意和先后次序的重要标志词。这些标志词包括关联词语、指示性代词,也包括表时序、次序、总括和举例解释等过渡性词语。

例2 把下面几个句子组成语意连贯的—段文字,排序正确的一项是

①在古代,这个信念有些神秘色彩;②在一切比较深入的科学研究后面,必定有一种信念驱使我们。③对于数学研究则还要加上一点:这个世界的合理性,首先在于它可以用数学来描述。④可是发展到现代,科学经过了多次伟大的综合,如欧几里得的综合,牛顿的综合,爱因斯坦的综合,计算机的出现,哪一次不是或多或少遵循这个信念?⑤这个信念就是:世界是合理的,简单的,因而是可以理解的。

A.②①④③⑤ B.①④②③⑤

C.②⑤③①④ D.①④②⑤③

[解析] 这个语段,共有五个句子。其中,句⑤中“这个信念”应承句②中“有一种信念”;由句④中的转折连词“可是”及其后的“观代”,可以推断带有“在古代”的①句应在其前面;而句③中“则…‘还要…‘合理”等词语则很明显是相对于句⑤而言。所以答案为C。

三、寻句子

寻找语段中的关键语句是正确排序的又一途径。这里的关键句是指语段中心句、起始句,过渡句和 总结 句等.这些句子能够明确地表明语段的中心、表达顺序和层次结构。

例3 把下面几个句子组成语意连贯的一段话,排序正确的—组是

①每—种话语体系,都代表了特定的视界。

②我们说了上千年的古话,说了上千年的洋话,被迫形成了一种优势:说洋话,古人说不过我们;说古话,洋人说不过我们。

③用洋人的视界看古事,用古人的视界看洋事,都可能看到当事人看不到的东西。

④这是一个巨大的创新空间。

⑤我们可以有两个视界,两个既有重合之处,又有独到之处。

⑥更何况还有他们未曾见过的中国新事。

⑦创新来源于新发现,或者看到了新东西,或者看到了旧东西的新空间。

A.②①⑤③⑥④⑦

B.①⑤②③④⑦⑥

C.⑦④②①③⑥⑤

D.①⑤③⑥②④⑦

[解析] 通读这七句话可以看出②是起始句,导入话题;⑦是结尾句,总领全段;⑤中“两个视界”紧承①中“特定的视界”并引起下文③,⑥中“更”又紧承③。抓住这些典型句,然后再整合语段顺序,就能较轻松地得出答案A。

四、挖逻辑

一个语段中各句子之间存在着语意或事理上的逻辑关系,或由表及里,或由大到小,或由浅人深……以人们认识事物的过程为序,寻找事物发展的规律,将句子归类排序是一种常规方法。

例4 注意下列句子相互间用语的逻辑照应,把它们组合成语意连贯的一段话。(只填序号)

①窗子和门的根本分别,决不仅仅是有没有人进来出去。

②我们都知道,门和窗有不同的作用。

③窗子有时也可作为进出口用,譬如小偷或小说里幽会的情人就喜欢爬窗子。

④譬如从赏春一事来看,我们不妨这样说:有了门,我们可以出去;有了窗,我们可以不必出去。

⑤当然,门是造了让人出进的。

答:——

[解析] 这几句话阐述了门和窗的作用,②句导入话题,当为首句,同时门和窗的叙述又照应着⑤和③的顺序,①句“不仅仅是”紧承③句,④句是①句的举例说明。由以上逻辑分析可以得出答案为②⑤③①④。

五、辨话题

—个语段,一般有—个中心话题,或写入,或绘景,或叙事,或状物,或论理。如果我们能找到这个中心话题,一定会对正确排列语序有很大帮助。

例5 注意下列句子相互间用语的逻辑照应,把它们组合成语意连贯的一段话。(只填序号)

①修建一所房屋或者布置一个花园,要让住在别地的朋友知道房屋花园是怎么个光景,就得画关于这所房屋这个花园的图。

②编纂关于动物植物的书籍,要让读者明白动物植物外面的形态跟内部的构造,就得画种.种动物植物的图。

③读者看了,明白了,住在外地的朋友看了,知道了,就完成了它的功能。

④这类的图,绘画的动机都在实用。

⑤咱们画图,有时候为的实用。

答:———一一——

[解析] 语段的话题中心是“绘图的实用功能”,⑤是总领句。由,④句“这类”一词可知其前有具体的“图纸”①②句,第③句是文段的收尾,且“读者”“外地的朋友”暗示前面应是②①,可见正确语序是⑤②①④③。

以上简单介绍了五种常见的语句排序方法,如果能够综合运用,再加上霎时注意多观察、多训练,一定可以快速而准确地解答排序题。

3小学语文排序题方法技巧

第一步,认真阅读材料,明确体裁和中心。

做句子排序题,首先要认真阅读语段,明确体裁,把握语段特点。其次,明确材料的中心。思考语段是围绕什么中心展开的。抓住了中心,就抓住了要害。中心句常在段首,有时在段尾,极少在中间。然后,我们可以根据“中心句”或“总领句”来确定首句或尾句。对于描写性语段,一般要从描写对象、描写内容、描写角度、描写顺序、事物特点、段落结构等方面入手。

第二步,理清思路。

不同体裁的 文章 ,思路也会有所不同: 记叙文 的句序常常以时间、空间或事情的发展过程(起因、经过和结果)为顺序; 议论文 的句序,常常把观点放在前面,把材料句放在中间,把总结句放在后面,结构形式为提出问题、分析问题、解决问题; 说明文 同议论文一样,往往把事理句放在前面,把材料句放在后面,因为材料是用来说明事理的,材料的内部又遵循一定的顺序(时间、空间、逻辑)。理清思路,有利于从整体上理顺句序。一段写景的顺序由观察的角度决定,是俯视、仰视、平视,是从远到近,还是从上到下,是移步换景还是定点观察。写景的句子常用比喻、拟人等修辞手法,常采用整散结合的句式,讲究押韵、平仄、对称。

第三步,抓语言标志,把握句子间的逻辑关系。

从局部看,句与句之间往往呈现出并列、承接、解说、对比、递进、转折、因果、总分等逻辑关系。而这些关系往往体现在一些语言标志上。①关联词语的呼应,或并列、或转折、或条件、或假设、或递进、或因果……②暗示性词语的使用。“同时”表示并列,位在后;“与此同时”“与此相反”“反过来说”,表示相反、相对关系,中间不可插入别的词语;“首先”“其次”“再次”,表示主次轻重的顺序,不可倒置;“过去”“现在”与“将来”,表示时间先后;“总之”“综上所述”“由此看来”,表示要提出结论;“诸如此类”,表示综合……③有指代意义的词语。有指代意义的词语往往紧跟在所指代的内容后面。④句子之间的过渡、对应关系(内容上、形式上),也往往体现语言顺序的一致性。⑤陈述对象前后一致。抓住这些语言标志,可以把握句与句之间的逻辑关系,有利于尽可能多地确定出必然相连接的句子。

在给句子排顺序感到比较困难时,我们还可以先将意思上有紧密联系的句子组合成句子“单元”,化零为整;然后按照这段话的思路和层次把句子“单元”进行组接整合,从而完成排序。

第四步,联读语感检验。

在完成前面三步之后,将初步排成的段落连起来读一读,看语意是否连贯,有没有感觉不对的地方,如果有,给予调整,直到感觉流畅为止。

4小学语文排序题有哪些方法

一、抓关键词(关联词)法

例1.填入横线上的句子,顺序最恰当的一组是()

出土于河南新郑的莲鹤方壶是东周时期青铜礼器的代表器物。

_____________;___________;___________;___________。___________。其造型宏伟气派,装饰典雅华美,堪称“国之重宝”。

①壶底还铸有两只卷尾兽,支撑着全器重量

②壶颈两侧有附壁回首的龙形怪兽双耳

③腹部的四角各攀附一条立体飞龙

④方壶通体满饰龙凤花纹,凝重而不失华丽

⑤壶冠呈双层盛开的莲瓣形,中间平盖上立有一只展翅欲飞的仙鹤

A.⑤②③①④

B.④⑤③②①

C.⑤③①②④

D.④⑤①②③

【解析】在不少按时间和空间顺序进行描写和说明的语段中,常常会出现表时间和空间的词,这些词先后顺序明显。同学们在解答排序题时如果能抓住这些关键词,往往很容易就能理出答案。如上述例题,是介绍国宝青铜器莲鹤方壶的,只要抓住了“冠”、“颈”、“腹”、“底”这些表空间概念的关键词,找出答案A就非常容易。

例2.在下面语段的空白处填入的一组句子,排序正确的一项是( )

怨天尤人不仅是一种懦弱,_________。__________,____________,__________。一个真正意义上的强者并不是一个一帆风顺的幸运儿,必然要经历各种痛苦和挑战,而战胜一切困难的人首先必须战胜自己,战胜自己的前提就是反省自身。

①不但掩盖了自己不能面对的现实

②更是一种不成熟的表现

③还留下了将来可能重蹈覆辙的隐患

④而不客观地责怪他人还会衍生出新的矛盾

A.②④①③

B.④②①③

C.④①③②

D.②①③④

【解析】在不少逻辑性强的语段中,都会使用关系词来连接上下句,明确句与句之间的关系。如表因果关系的“因为……所以”,表转折关系的“不但……而且”,表递进关系的“不仅……还”等,表条件关系的“只有……才”等。在排序时,如果能抓住这些关系词,往往能起到事半功倍的效果。譬如这道例题,第一句子表递进,用“不仅……更”;第二个句子同样是递进,用“不但……还……还”,只要一看到相关关键词,答案D立马就出来了。

二、事物连接法

例3.下列排序正确的一项是( )

①清风拂过,细纱在空中荡开,又滑下来。②这雨丝,是漓江之畔的苗女刚刚从碧水中拎起的那缕柔柔细细的纱。③然后悄悄洒向扁舟,洒向村落,洒向群山。④她伸展开手臂,轻轻地把细纱挂向云端。⑤春雨如丝。

A.⑤①②④③

B.⑤②④③①

C.⑤②④①③

D.⑤①④②③

【解析】不少描写性语段,上句与下句之间,往往事物相连,意思相承,环环相扣。有句语段,下句的开头甚至就是上句的结尾。这类排序题,只要能先准确找到首句,然后依照上句,根据意思向下连接就行。譬如这道例题,先写“春雨如丝”,接着写“雨丝如纱”,然后写“她把细纱挂向云端”,再写细纱“荡开”、“滑下”,最后写细纱被洒向各处,其顺序可谓一目了然,一下就能找到C这个答案。

三、结构分析法

例4.给下列句子排序,最合理的一项是( )

①归结起来,有两种态度是正好相反的。

②前者是错误的,注定会失败;后者是正确的,必然会胜利。

③人们对待事物运动的力量可以采取种.种不同的态度。

④一种是积极疏导使之顺利发展。

⑤一种是堵塞事物运动发展的道路。

A.③⑤④①②

B.③①⑤④②

C.①⑤④②③

D.①②⑤④③

【解析】一些说明性语段,结构很特别,要么是先总后分,要么是先分后总,要么是总—分—总。碰到这类排序题时,先整体判断一下语段呈什么结构,哪句是总写句,哪些是分写句,然后尝试排序,最后选出最合适的一项。譬如这道例题,先总写人们对事物的不同态度,接着从正反两方面分析,最后得出结论,总—分—总的结构很明显。而只要确定了③①,B这个答案也就出来了。


6. 排序法都有哪些

排序法可分为简单排序法和交替排序法。

7. EXCEL如何判断一列数据是否已经正确排序

假定原数据在A列,先在其后插入两个空白列(B、C列),将A
列数据
复制到B列,将B列按升序(或降序)排序,在C1输入公式:
=IF(A1=B1,0,1)
按回车,单击C1单元格,将
鼠标指针
移到C1单元格的右下角,当指针变为小十字时双击鼠标左键。
用鼠标选定C列,看底部状态行的求和是否=0,如果是说明A列已经正确升序(或降序)排列。

阅读全文

与如何判断排序的方法相关的资料

热点内容
智远一户通使用方法 浏览:822
驾驶避免剐蹭的方法有哪些 浏览:734
胸上缝的训练方法 浏览:106
太原公交乘车码使用方法 浏览:944
三星手机拨号快捷键怎么设置在哪里设置方法 浏览:528
如何辨别钻石好坏的方法 浏览:431
hdlc检测方法 浏览:670
水培石斛兰的种植方法 浏览:426
干式变压器项目研究试验方法 浏览:386
青春期偏头疼的原因和解决方法 浏览:66
瓷砖成型缺陷解决方法 浏览:392
一岁半亚麻籽油的食用方法 浏览:28
虫害处理方法哪里找 浏览:416
决战平安京有哪些方法登录 浏览:578
小腿划伤怎么处理方法 浏览:478
如何测量磷酸盐的方法 浏览:976
平稳序列检测方法 浏览:919
不打针治疗咳嗽的方法 浏览:280
毛利润30利润计算方法 浏览:4
后束三角肌的锻炼方法 浏览:56