導航:首頁 > 方法技巧 > 如何判斷排序的方法

如何判斷排序的方法

發布時間: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列已經正確升序(或降序)排列。

閱讀全文

與如何判斷排序的方法相關的資料

熱點內容
洗衣機使用方法的視頻 瀏覽:512
嬰幼兒皮炎怎麼治療方法 瀏覽:944
廣電路由器連接電視方法 瀏覽:202
消防編碼器的使用方法 瀏覽:721
如何正確方法畫出粽子 瀏覽:645
用什麼方法可以查出輸尿管癌症 瀏覽:295
如何止住流淚的方法 瀏覽:963
怎麼發制海參的方法 瀏覽:210
什麼叫分步說明的方法 瀏覽:429
用哪些方法可以預防糖尿病 瀏覽:459
甲亢治療方法比較 瀏覽:573
分數計算方法如何運用 瀏覽:493
ipadqq麥克風設置在哪裡設置方法 瀏覽:659
免疫缺陷病治療方法 瀏覽:855
腳尖地面上組合訓練方法 瀏覽:433
海鮮對蝦的食用方法 瀏覽:386
如何理解決策力的方法 瀏覽:787
頸肩痛的最好鍛煉方法骨科醫生 瀏覽:796
鋼的熱處理的方法有哪些 瀏覽:850
智遠一戶通使用方法 瀏覽:824