A. 排序方法都有哪幾種,比如1、2、3。。。。。。甲乙丙丁等
排序方法一般都就那幾種。像冒泡排序,直接插入排序,快速排序,簡單選擇排序,希爾排序,堆排序。其排序介紹自己看吧。
1、冒泡排序屬於穩定排序,是一種藉助「交換」進行排序的方法。首先要將第一個記錄的關鍵字和第二個記錄的關鍵字進行比較,若為逆序,則將兩個記錄交換之,然後比較第二個記錄與第三個記錄的關鍵字,以此類推,直至第n-1個記錄與第n個記錄的關鍵字進行比較為止,這一過程稱為第一趟冒泡排序,其結果使得關鍵字最大的記錄被安置在最後一個記錄的位置上;然後進行第二趟冒泡排序,對前N-1個記錄進行同樣操作;以此類推,直到在一趟排序過程中沒有進行過交換記錄的操作為止。
2、直接插入排序屬於穩定的排序,每次從無序表中取出第一個元素,把它插入到有序表的合適位置,使有序表仍然有序。第一趟將待比較的數值與它的前一個數值進行比較,當前一數值比待比較數值大的情況下繼續循環比較,依次進行下去,進行了(n-1)趟掃描以後就完成了整個排序過程,結束該次循環。
3、快速排序屬於不穩定排序,是對起泡排序的一種改進。它的基本思想是,通過一趟排序將待排記錄分割成獨立的兩部分,其中一部分記錄的關鍵字均比另一部分記錄的關鍵字小,則可分別對這兩部分記錄繼續進行排序,以達到整個序列有序。假設待排序的序列為{R.[s],R.[s+1],…….,R.[t]},首先任意選取一個記錄,然後按下述原則從新排序記錄:將關鍵字較他小的記錄都安置在他的位置之前,將所有關鍵字較他大的記錄都安置在他的位置後面。由此可以該「樞軸」記錄最後所落的位置i作為分界線,將序列{R[s],R[s+1]…….R[t]}分割成兩個子序列{R[s],R[s+1]…..R[i-1]}和{R[i+1]……R[t]},這個過程稱作一趟快速排序。一趟快速排序的具體做法是:附設兩個指針low和high,它們的初值分別指向數組第一個數據和最後一個數據,將樞軸記錄暫存在R[0]的位置上排序過程中只作R[low]或R[high]的單向移動,直至一趟排序結束後再將樞軸記錄移至正確位置上。
4、簡單選擇排序屬於不穩定排序,基本思想是,每一趟在n-i+1(i=1,2,…n-1)個記錄中選取關鍵字最小的記錄作為有序序列中第i個記錄。第i趟簡單選擇排序是指通過n-i次關鍵字的比較,從n-i+1個記錄中選出關鍵字最小的記錄,並和第i個記錄進行交換。共需進行n-1趟比較,直到所有記錄排序完成為止。例如:進行第i趟選擇時,從當前候選記錄中選出關鍵字最小的k號記錄,並和第i個記錄進行交換。
5、希爾排序屬於不穩定排序,也是一種屬插入排序類,它的基本思想是:先將整個待排記錄序列分割稱為若干個子序列分別進行直接插入排序,待整個序列中記錄「基本有序」時,再對全體記錄進行一次直接插入排序。希爾排序的一個特點是:子序列的構成不是簡單的「逐段分割」,而是將相隔某個「增量」的記錄組成一個子序列。
6、堆排序屬於不穩定排序,它的基本思想是,先將初始文件R[1..n]建成一個大根堆,此堆為初始的無序區,再將關鍵字最大的記錄R[1](即堆頂)和無序區的最後一個記錄R[n]交換,由此得到新的無序區R[1..n-1]和有序區R[n],且滿足R[1..n-1].keys≤R[n].key;由於交換後新的根R[1]可能違反堆性質,故應將當前無序區R[1..n-1]調整為堆,然後再次將R[1..n-1]中關鍵字最大的記錄R[1]和該區間的最後一個記錄R[n-1]交換,由此得到新的無序區R[1..n-2]和有序區R[n-1..n],且仍滿足關系R[1..n- 2].keys≤R[n-1..n].keys,同樣要將R[1..n-2]調整為堆。直到無序區只有一個元素為止
B. Excel表格中常用的排序方法有哪些
製作Excel表格的過程中,對其中的內容進行排序是大家經常會遇到的情況,下面小編介紹幾種最為常用但是很多人卻不知道的排序方法。
01
首先就是按照筆劃來排序,我們經常會看到課本或者花名冊上都有按照姓氏筆畫來排序的提示,也就是說按照筆劃的多少進行排列的,如何設置這種排序呢?首先我們選中需要排序的那一列,比如下圖中的B列;
02
然後依次點擊工具欄中的「數據」-「排序」,如圖一所示...然後在彈出的排序提醒對話框勾選下方的「以當前選定區域排序」;
03
接下來點擊排序對話框右上角的「選項」,然後勾選排序選項對話框最下方的「筆劃排序」;
04
點擊確定返回到表格以後,我們就會發現這一列的所有文字全部按照首個文字的筆劃多少來進行排序了;此外如果有時候不知道應該按照何種規則來排序的話,那麼就可以用到下面小編介紹的隨機排序方法了,在表格的最後一列輸入公式「=RAND()」,見圖二...
05
點擊回車鍵以後,該單元格中就會彈出一個隨機數字,將其下拉拖動應用到所有列,最終效果如圖一所示...然後依次點擊「數據」-「升序」或者「降序」,這樣表格裡面的內容就會隨機排序了;
06
最後我們還能按照表格中文字的顏色來排序,比如下圖的表格中既有紅色文字,也有藍色文字...
07
依舊按照以上的方法將排序對話框打開,然後勾選排序依舊中的「字體顏色」,並且自定義每種顏色文字的次序,我們以紅色文字在頂端,藍色文字在底端為例做介紹;
08
同樣點擊對話框中的確定,返回到表格以後,我們就會發現紅色的文字內容在表格最頂端,而藍色的文字則被排序到了最底端,如下圖所示...
C. 常用的排序演算法都有哪些
排序演算法 所謂排序,就是使一串記錄,按照其中的某個或某些關鍵字的大小,遞增或遞減的排列起來的操作。
分類
在計算機科學所使用的排序演算法通常被分類為:
計算的復雜度(最差、平均、和最好表現),依據串列(list)的大小(n)。一般而言,好的表現是O。(n log n),且壞的行為是Ω(n2)。對於一個排序理想的表現是O(n)。僅使用一個抽象關鍵比較運算的排序演算法總平均上總是至少需要Ω(n log n)。
記憶體使用量(以及其他電腦資源的使用)
穩定度:穩定排序演算法會依照相等的關鍵(換言之就是值)維持紀錄的相對次序。也就是一個排序演算法是穩定的,就是當有兩個有相等關鍵的紀錄R和S,且在原本的串列中R出現在S之前,在排序過的串列中R也將會是在S之前。
一般的方法:插入、交換、選擇、合並等等。交換排序包含冒泡排序(bubble sort)和快速排序(quicksort)。選擇排序包含shaker排序和堆排序(heapsort)。
當相等的元素是無法分辨的,比如像是整數,穩定度並不是一個問題。然而,假設以下的數對將要以他們的第一個數字來排序。
(4, 1) (3, 1) (3, 7) (5, 6)
在這個狀況下,有可能產生兩種不同的結果,一個是依照相等的鍵值維持相對的次序,而另外一個則沒有:
(3, 1) (3, 7) (4, 1) (5, 6) (維持次序)
(3, 7) (3, 1) (4, 1) (5, 6) (次序被改變)
不穩定排序演算法可能會在相等的鍵值中改變紀錄的相對次序,但是穩定排序演算法從來不會如此。不穩定排序演算法可以被特別地時作為穩定。作這件事情的一個方式是人工擴充鍵值的比較,如此在其他方面相同鍵值的兩個物件間之比較,就會被決定使用在原先資料次序中的條目,當作一個同分決賽。然而,要記住這種次序通常牽涉到額外的空間負擔。
排列演算法列表
在這個表格中,n是要被排序的紀錄數量以及k是不同鍵值的數量。
穩定的
冒泡排序(bubble sort) — O(n2)
雞尾酒排序 (Cocktail sort, 雙向的冒泡排序) — O(n2)
插入排序 (insertion sort)— O(n2)
桶排序 (bucket sort)— O(n); 需要 O(k) 額外 記憶體
計數排序 (counting sort) — O(n+k); 需要 O(n+k) 額外 記憶體
歸並排序 (merge sort)— O(n log n); 需要 O(n) 額外記憶體
原地歸並排序 — O(n2)
二叉樹排序 (Binary tree sort) — O(n log n); 需要 O(n) 額外記憶體
鴿巢排序 (Pigeonhole sort) — O(n+k); 需要 O(k) 額外記憶體
基數排序 (radix sort)— O(n·k); 需要 O(n) 額外記憶體
Gnome sort — O(n2)
Library sort — O(n log n) with high probability, 需要 (1+ε)n 額外記憶體
不穩定
選擇排序 (selection sort)— O(n2)
希爾排序 (shell sort)— O(n log n) 如果使用最佳的現在版本
Comb sort — O(n log n)
堆排序 (heapsort)— O(n log n)
Smoothsort — O(n log n)
快速排序 (quicksort)— O(n log n) 期望時間, O(n2) 最壞情況; 對於大的、亂數串列一般相信是最快的已知排序
Introsort — O(n log n)
Patience sorting — O(n log n + k) 最外情況時間, 需要 額外的 O(n + k) 空間, 也需要找到最長的遞增子序列(longest increasing subsequence)
不實用的排序演算法
Bogo排序 — O(n × n!) 期望時間, 無窮的最壞情況。
Stupid sort — O(n3); 遞回版本需要 O(n2) 額外記憶體
Bead sort — O(n) or O(√n), 但需要特別的硬體
Pancake sorting — O(n), 但需要特別的硬體
排序的演算法
排序的演算法有很多,對空間的要求及其時間效率也不盡相同。下面列出了一些常見的排序演算法。這裡面插入排序和冒泡排序又被稱作簡單排序,他們對空間的要求不高,但是時間效率卻不穩定;而後面三種排序相對於簡單排序對空間的要求稍高一點,但時間效率卻能穩定在很高的水平。基數排序是針對關鍵字在一個較小范圍內的排序演算法。
插入排序
冒泡排序
選擇排序
快速排序
堆排序
歸並排序
基數排序
希爾排序
插入排序
插入排序是這樣實現的:
首先新建一個空列表,用於保存已排序的有序數列(我們稱之為"有序列表")。
從原數列中取出一個數,將其插入"有序列表"中,使其仍舊保持有序狀態。
重復2號步驟,直至原數列為空。
插入排序的平均時間復雜度為平方級的,效率不高,但是容易實現。它藉助了"逐步擴大成果"的思想,使有序列表的長度逐漸增加,直至其長度等於原列表的長度。
冒泡排序
冒泡排序是這樣實現的:
首先將所有待排序的數字放入工作列表中。
從列表的第一個數字到倒數第二個數字,逐個檢查:若某一位上的數字大於他的下一位,則將它與它的下一位交換。
重復2號步驟,直至再也不能交換。
冒泡排序的平均時間復雜度與插入排序相同,也是平方級的,但也是非常容易實現的演算法。
選擇排序
選擇排序是這樣實現的:
設數組內存放了n個待排數字,數組下標從1開始,到n結束。
i=1
從數組的第i個元素開始到第n個元素,尋找最小的元素。
將上一步找到的最小元素和第i位元素交換。
如果i=n-1演算法結束,否則回到第3步
選擇排序的平均時間復雜度也是O(n²)的。
快速排序
現在開始,我們要接觸高效排序演算法了。實踐證明,快速排序是所有排序演算法中最高效的一種。它採用了分治的思想:先保證列表的前半部分都小於後半部分,然後分別對前半部分和後半部分排序,這樣整個列表就有序了。這是一種先進的思想,也是它高效的原因。因為在排序演算法中,演算法的高效與否與列表中數字間的比較次數有直接的關系,而"保證列表的前半部分都小於後半部分"就使得前半部分的任何一個數從此以後都不再跟後半部分的數進行比較了,大大減少了數字間不必要的比較。但查找數據得另當別論了。
堆排序
堆排序與前面的演算法都不同,它是這樣的:
首先新建一個空列表,作用與插入排序中的"有序列表"相同。
找到數列中最大的數字,將其加在"有序列表"的末尾,並將其從原數列中刪除。
重復2號步驟,直至原數列為空。
堆排序的平均時間復雜度為nlogn,效率高(因為有堆這種數據結構以及它奇妙的特徵,使得"找到數列中最大的數字"這樣的操作只需要O(1)的時間復雜度,維護需要logn的時間復雜度),但是實現相對復雜(可以說是這里7種演算法中比較難實現的)。
看起來似乎堆排序與插入排序有些相像,但他們其實是本質不同的演算法。至少,他們的時間復雜度差了一個數量級,一個是平方級的,一個是對數級的。
平均時間復雜度
插入排序 O(n2)
冒泡排序 O(n2)
選擇排序 O(n2)
快速排序 O(n log n)
堆排序 O(n log n)
歸並排序 O(n log n)
基數排序 O(n)
希爾排序 O(n1.25)
冒泡排序
654
比如說這個,我想讓它從小到大排序,怎麼做呢?
第一步:6跟5比,發現比它大,則交換。564
第二步:5跟4比,發現比它大,則交換。465
第三步:6跟5比,發現比它大,則交換。456
D. 語文排序的方法有哪些
語文做排序題,需要先找准總起句,然後分句之間要注意內在邏輯關系,有的句子還會有明顯的關鍵詞提醒。
E. 排序法都有哪些
一、插入排序(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]
F. 緊急!!!!!!!有什麼排序方法各有什麼特點
一般常見的有
(1)冒泡排序
簡單,時間復雜度O(n^2)
(2)插入排序
簡單,比冒泡難寫,時間復雜度O(n^2),通常比冒泡快
(3)快速排序
稍難,平均O(nlogn),最壞O(n^2)
(4)選擇排序
簡單
O(n^2)
(5)歸並排序
使用了遞歸演算法
(6)堆排序
O(nlogn),時間很穩定
(7)計數排序
線性時間排序演算法,不過要求數據種類少
常見的排序演算法還有很多,實在很難一下子說清楚,也就舉這些吧。
G. 排序有幾種方法
一. 冒泡排序
冒泡排序是是一種簡單的排序演算法。它重復地遍歷要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把它們交換過來。遍歷數列的工作是重復的進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢「浮」到數列的頂端
1.冒泡排序演算法的運作如下:
(1)比較相鄰的元素。如果第一個比第二個大(升序),就交換他們兩個
(2)對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。這步做完後,最後的元素還是最大的數
(3)針對所有的元素重復以上的步驟,除了最後一個
二. 選擇排序
選擇排序是一種簡單直觀的排序演算法。他的工作原理如下:
首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置(末尾位置),然後,再從剩餘未排序元素中繼續尋找最小(大)元素,然後放到已排序序列的末尾。以此類推,直到所有元素均排序完畢
選擇排序的主要優點與數據移動有關。如果某個元素位於正確的最終位置上,則它不會被移動。選擇排序每次交換一對元素,他們當中至少有一個將被移到最終位置上,因此對n個元素的表進行排序總共進行至多n-1次交換。在所有的完全依靠交換去移動 元素的排序方法中,選擇排序屬於非常好的一種
三. 插入排序
插入排序是一種簡單直觀的排序演算法。它的工作原理是通過構建有序序列,對於未排序數據,在已排序序列中從後向前掃描,找到相應位置並插入。插入排序在從後向前掃描的過程中,需要反復把已排序元素逐步向後挪位,為最新元素提供插入空間
四. 快速排序
快速排序,又稱劃分交換排序。通過一趟排序將要排序的數據分割成獨立的兩部分,其中一部分的所有數據都要小,然後再按此方法對兩部分數據分別進行快速排序,整個排序過程可以遞歸進行,以此達到整個數據變成有序序列
五 希爾排序過程
希爾排序是插入排序的一種,也稱縮小增量排序,是直接插入排序演算法的一種更高效的改進版本。希爾排序是非穩定排序演算法。希爾排序是把記錄按下標的一定增量分組,對每組使用直接插入排序演算法排序;隨著增量逐漸減少,每組包含的關鍵詞越來越多,當增量減至1時,整個文件恰被分成一組,演算法便終止。
六. 歸並排序
歸並排序是採用分治法(把復雜問題分解為相對簡單的子問題,分別求解,最後通過組合起子問題的解的方式得到原問題的解)的一個非常典型的應用。歸並排序的思想就是先遞歸分解數組,再合並數組
將數組分解最小之後,然後合並兩個有序數組,基本思路是比較兩個數組的最前面的數,水小九先取誰,取了後相應的指針就往後移一位。然後比較,直至一個數組為空,最後把另一個數組的剩餘部分復制過來即可
H. 排序方法有哪些
五大類方法:插入排序(直接插入排序、希爾排序等)、快速排序(冒泡排序、快速排序)、選擇排序(簡單選擇排序、樹形選擇排序、堆排序)、歸並排序、基數排序
I. 幾種排序方法的解釋
快速排序,就是拿出一個元素,把比它小的都放在左邊,比它大的都放在右邊,然後把左右兩邊的序列繼續這樣排序。通常拿出的這個元素都是序列中的第一個,因為這樣比較簡單,不用思考。舉例:
4,2,7,5
第一次整理為:2,(4),7,5
冒泡排序就是相鄰元素的兩個兩個比較,第一個第二個比較,大的放在第二個,第二個第三個比較,大的放在第三個……從左到右來一次,就會有一個最大的被找到而放在了最右邊,這個過程就像水了的泡泡越上浮越大一樣。舉例:
4,2,7,5
第一次比較:2,4,7,5
第二次比較:2,4,7,5
第三次比較:2,4,5,7
直接插入排序,就是向有序序列中放入一個元素,先放在最後看看,發現不符合順序要求,那就放在倒數第二個,看看,還不符合要求……一直找到一個位置,使這些元素有序,那麼就實現了排序。舉例:
4,2,7,5
第一次,只有一個4,認為是有序的。所以結果是:4,2,7,5
第二次,把2一起考慮進來,發現比前面的4小,所以無序,那麼交換他倆,所以是:2,4,7,5
然後繼續看,發現2已經到最前面了,那麼就結束吧。
第三次,把7一起考慮進來,發現比前面的4大,所以順序是對的。結果是:2,4,7,5
第四次,把5考慮進來,發現比7小,交換,比前面的4大,ok,位置可以固定了,結果是:2,4,5,7
最後的堆排序麻煩一些,要考慮堆的意義。舉小堆來說,好比一摞金子塔(三角形),頂上的總是腳上的兩個小,所以最上面尖尖上的元素是最最小的,而最大的一定在最底下一層里,位置不固定的。堆排序就是說,每次取最小的那個(小堆的例子)也就是最上面那個,取出來之後,把其他的元素再整理成小堆,再取最頂上那個是次小的元素,這樣一直把所有元素都取出來,取的順序就是排序的結果了。舉例:
。。。3。。。
。。4。。5。
。5。6。9
採取的方案是把最小的和最後一個交換位置,理解為取出了最頂上那個。
。。。9.。。。
。。4.。。5.。
。5。6.。3
注意,3是第一個取出來的,就可以認為它不存在啦,接著整理這個堆,9-4-5這個三角形整理一下,變成:
。。。4.。。。
。。9.。。5.。
。5.。6.。。。
看到左下角的三角形不符合規則,繼續整理
。。。4.。。。
。。5.。。5.。
。9.。6.。。。
ok了,所有元素又呈現堆的樣子了,每個三角形中,下面的都比上面的大。可以取下一個次小的元素啦。
上面解釋的比較模糊,如果有問題,就繼續聯絡吧。
J. 幾種排序方法
這兩天復習了一下排序方面的知識,現將目前比較常見的整理一下。 選擇排序選擇排序的思想是首先先找到序列中最大元素並將它與序列中最後一個元素交換,然後找下一個最大元素並與倒數第二個元素交換,依次類推。此排序很簡單,這不做多說,代碼實現如下:View Code插入排序演算法流程:1. 從第一個元素開始,該元素可以認為已經被排序 2. 取出下一個元素,在已經排序的元素序列中從後向前掃描 3. 如果該元素(已排序)大於新元素,將該元素移到下一位置 4. 重復步驟3,直到找到已排序的元素小於或者等於新元素的位置 5. 將新元素插入到下一位置中 6. 重復步驟2View Code冒泡排序依次比較相鄰的兩個數,將小數放在前面,大數放在後面。即在第一趟:首先比較第1個和第2個數,將小數放前,大數放後。然後比較第2個數和第3個數,將小數放前,大數放後,如此繼續,直至比較最後兩個數,將小數放前,大數放後。至此第一趟結束,將最大的數放到了最後。在第二趟:仍從第一對數開始比較(因為可能由於第2個數和第3個數的交換,使得第1個數不再小於第2個數),將小數放前,大數放後,一直比較到倒數第二個數(倒數第一的位置上已經是最大的),第二趟結束,在倒數第二的位置上得到一個新的最大數(其實在整個數列中是第二大的數)。如此下去,重復以上過程,直至最終完成排序。 View Code合並排序在介紹合並排序之前,首先介紹下遞歸設計的技術,稱為分治法。分治法的核心思想是:當問題比較小時,直接解決。當問題比較大時,將問題分為兩個較小的子問題,每個子問題約為原來的一半。使用遞歸調用解決每個子問題。遞歸調用結束後,常常需要額外的處理,將較小的問題的結果合並,得到較大的問題的答案。 合並排序演算法在接近數組中間的位置劃分數組,然後使用遞歸運算對兩個一半元素構成的數組進行排序,最後將兩個子數組進行合並,形成一個新的已排好序的數組。 代碼如下:View Code快速排序快速排序與合並排序有著很多相似性。將要排序的數組分成兩個子數組,通過兩次遞歸調用分別對兩個數組進行排序,再將已經排好序的兩個數組合並成一個獨立的有序數組。但是,將數組一分為二的做法比合並排序中使用的簡單方法復雜的多。它需要將所有小於或者等於基準元素的元素放置到基準元素前面的位置,將大於基準的元素放置到基準後面的位置。 View Code堆排序View Code大概常用的幾種排序就這幾種,希望大家多多指正。