當前位置:首頁 » 操作系統 » 單鏈表排序最快的演算法

單鏈表排序最快的演算法

發布時間: 2023-05-04 10:25:27

㈠ 數據結構中哪種排序方式效率最好

簡單排序的演算法(直接插入,冒泡,簡單選擇排序)簡單且穩定,適合與待排記錄較小的情況,當當待排序的關鍵碼序列已經基本有序時,用直接插入排序最快。
就平均時間的性能而言,快速排序最佳,即排序速度最快,所以在隨機情況下,快速排序是最佳選擇。一般情況下,快速排序效率最好。
既要節省空間,又要有較快的排序速度,堆排序是最佳選擇,其不足之處是建堆時需要消耗較多時間。
若希望排序是穩定的,且有較快的排序速度,則可選用2路歸並排序,其缺點需要較大的輔助空間分配。

㈡ 對單鏈表中的數據進行排序,用哪種演算法比較好

typedef struct __LINK
{
int data;
struct __LINK *next;
} LinkNode_t;

//冒泡排序單連表, 交換值方式
bool LinkSort( LinkNode_t* &head )
{
assert( head != NULL );
bool change = true;
LinkNode_t* p = head;
LinkNode_t* pStop = head->next;
int ifirst = 0;

while ( pStop && pStop->next )
{
pStop = pStop->next;
}

LinkNode_t* pFlag = head;

while ( change )
{
change = false;
for ( p = head->next; p != pStop; p = p->next )
{
if ( p->data < p->next->data )
{
int value = p->data;
p->data = p->next->data;
p->next->data = value;
change = true;
}
if ( p->next == pStop ) pFlag = p;
}
pStop = pFlag;
}
return true;
}

㈢ 最快的排序演算法是什麼

最快的排序演算法是什麼,很多人的第一反應是快排,感覺QuickSort 當然應該最快了,其實並非如此,坦歲快排是不穩定的,最壞情況下,快排序並不是最優,Java7 中引入的 TimSort 就是一個結合了插入排序和歸並排序的高效演算法.

Timsort最早是 Tim Peters 於2001年為 python 寫的排序演算法。自從發明該演算法以來,它已被用作Python,Java,Android平台和GNU Octave中的默認排序演算法。

關於此演算法的詳細描述參見 http://svn.python.org/projects/python/trunk/Objects/listsort.txt

看看它與另外兩個高效排序演算法的比較

相比之下, TimSort 的最佳,平均和最壞情況綜合起來最佳。在數據量比較少(<=64)的情況下,它直接用 Insert Sort,否則使用 MergeSort + BinarySearch 來提高排序效率

下面寫一個給撲克牌排序的例子,比較一下冒泡,插入,快排,歸並排序,TimSort的性能:

然後分別用以上5種排序方法來做下性能比較

將1000 副牌打亂順序的撲克牌排序下來,結果如下

但是 TimSort 也有讓做睜一個問題, 在 JDK7 的描述中提到它有如下兼容性問題

所以在JDK7以後,實現Comparable介面的比較器需要滿足以下三個約束條件:
1) 自反性:x,y 的比較結果和 y,x 的比較結果胡團相反。
2) 傳遞性:x>y, y>z,則 x>z。
3) 對稱性:x=y,則 x,z 比較結果和 y,z 比較結果相同。

如果你的比較方法違反了以上的約束,要麼你不使用這個新的演算法,還是回到傳統的歸並排序

要麼修改你的比較器以符合上述的約束條件。

舉兩個例子如下

㈣ 世界上最快的排序演算法

Timsort是一個自適應的、混合的、穩定的排序演算法,融合了歸並演算法和二分插入排序演算法的精髓,在現實世界的數據中有著特別優秀的表現。它是由Tim Peter於2002年發明的,用在Python這個編程語言裡面。這個演算法之所以快,是因為它充分利用了現實世界的待排序數據裡面,有很多子串是已經排好序的不需要再重新排序,利用這個特性並且加上合適的合並規則可以更加高效的排序剩下的待排序序列。

㈤ 在各類演算法中那種演算法排序是最快的

說句實話,沒有最快這一說。

  1. 如果不在乎浪費空間,應該是桶排序最快

  2. 如果整體基本有序,插入排序最快

  3. 如果考慮綜合情況,快速排序更加實用常見(希爾排序、堆排序等各種排序也各有優劣)

  4. 一般情況下,冒泡這種排序僅僅是名字起的有趣罷了,不太好用

㈥ 單鏈表的直接插入排序的演算法。問題

一開始head->next=NULL;與q=head->next;表示將頭指針與後面的鏈表完全斷開,然後p就是後面鏈表的第一個結點,第一個while就是用來判斷後面的那個鏈表是否有剩,然後q表示head的下一個結點,因為第一次操作head下一個是空的,所以第二個while跳出來,後面鏈表首結點下一個指向head的下一個即空,head下一個變成後面鏈表首結點,總的說就是把後面鏈表的首結點插到head的後面,之後p=pre來使後面鏈表首結點向後移。後面的操作也是一樣,不過經過第一輪操作後,head後面已經有了結點,所以第二輪操作需要第二個while來控制應該插在哪裡

㈦ 設計兩個有序單鏈表的合並排序演算法

方法一:依次基穗取鏈表2的節點,和鏈表1中的節點比較,找好位置之後插入到鏈表1中,然後兩個鏈表指針各加一

方法二:另外亂滑建一個空鏈表,然後分別取兩個鏈表的節點搏陪卜,按照順序,放入空鏈表中

方法三:兩個鏈表先連接然後排序(效率最低的)

㈧ 單鏈表上難以實現的排序方法

單鏈表上難以實現的排序方法是快速排序。根據查詢相關公開信息顯示,單鏈表上難以實現的排序方法是快灶做悶速排序法,包括堆排序和希爾排序,使用數組製作的靜態樹,胡搭使用單鏈表隱彎進行該演算法。

㈨ 什麼排序的速度(時間復雜度)最快

從時間復雜度看,所有內部排序方法可以分為兩類。

1.插入排序 選擇排序 起泡排序
其時間復雜度為O(n2);

2.堆排序 快速排序 歸並排序
其時間復雜度為O(nlog2n)。

這是就平均情況而言的,如果從最好的情況考慮,
則插入排序和起泡排序的時間復雜度最好,為O(n),
而其他演算法的最好情況同平均情況大致相同。

如果從最壞的情況考慮,快速排序的時間復雜度為O(n2),插入排序和起泡排序雖然同平均情況相同,但系數大約增加一倍,運行速度降低一半,而選擇排序、堆排序和歸並排序則影響不大。

總之,
在平均情況下,快速排序最快;
在最好情況下,插入排序和起泡排序最快;
在最壞情況下,堆排序和歸並排序最快。

㈩ 以下哪種排序演算法對進行的排序最快

1.選擇排序:不穩定,時間復雜度
O(n^2)
選擇排序的基本思想是對待排序的記錄序列進行n-1遍的處理,第i遍處理是將L[i..n]中最小者與L[i]交換位置。這樣,經過i遍處理之後,前i個記錄的位置已經是正確的了。
2.插入排序:穩定,時間復雜度
O(n^2)
插入排序的基本思想是,經過i-1遍處理後,L[1..i-1]己排好序。第i遍處理僅將L[i]插入L[1..i-1]的適當位置,使得L[1..i]
又是排好序的序列。要達到這個目的,我們可以用順序比較的方法。首先比較L[i]和L[i-1],如果L[i-1]≤
L[i],則L[1..i]已排好序,第i遍處理就結束了;否則交換L[i]與L[i-1]的位置,繼續比較L[i-1]和L[i-2],直到找到某一個位置j(1≤j≤i-1),使得L[j]
≤L[j+1]時為止。圖1演示了對4個元素進行插入排序的過程,共需要(a),(b),(c)三次插入。
3.冒泡排序:穩定,時間復雜度
O(n^2)
冒泡排序方法是最簡單的排序方法。這種方法的基本思想是,將待排序的元素看作是豎著排列的「氣泡」,較小的元素比較輕,從而要消慎稿往上浮。在冒泡排序演算法中我們要對這個「氣泡」序列處理若干遍。所謂一遍處理,就是自底向上檢查一遍這個序列,並時刻注意兩個相鄰的元素的順序是否正確。如果發現兩個相鄰元素的順序不對,即「輕」的元素在下面,就交換它們的位置。顯然,處理一遍之後,「最輕」的元素就浮拿孝到了最高位置;處理二遍之後,「次輕」的元素就浮到了次高位置。在作第二遍處理時,由於最高位置上的元素已是「最輕」元素,所以不必檢查。一般地,第i遍處理時,不必檢查第i高位置以上的元素,因為經過前面i-1遍的處理,它們已正確地排好序。
4.堆排序:不穩定,時間復雜度
O(nlog
n)
堆排序是一種樹形選擇排序,在排序過程中,將A[n]看成是完全二叉樹的順序存儲結構,利用完全二叉樹中雙親結點和孩子結點之間的內在關系來選擇最小的元素。
5.歸並排序:穩定,時間復雜度
O(nlog
n)
設有兩個有序(升序)序列存儲在孝橡同一數組中相鄰的位置上,不妨設為A[l..m],A[m+1..h],將它們歸並為一個有序數列,並存儲在A[l..h]。
6.快速排序:不穩定,時間復雜度
最理想
O(nlogn)
最差時間O(n^2)
快速排序是對冒泡排序的一種本質改進。它的基本思想是通過一趟掃描後,使得排序序列的長度能大幅度地減少。在冒泡排序中,一次掃描只能確保最大數值的數移到正確位置,而待排序序列的長度可能只減少1。快速排序通過一趟掃描,就能確保某個數(以它為基準點吧)的左邊各數都比它小,右邊各數都比它大。然後又用同樣的方法處理它左右兩邊的數,直到基準點的左右只有一個元素為止。
幾種排序的時間復雜度,可以參考一下

熱點內容
androidactivity事件 發布:2025-09-14 18:09:43 瀏覽:705
文件夾名字透明 發布:2025-09-14 18:02:37 瀏覽:486
計算機退出域之後密碼是什麼 發布:2025-09-14 17:53:00 瀏覽:995
美猴雲伺服器 發布:2025-09-14 17:51:29 瀏覽:753
編譯預處理時列印宏的值 發布:2025-09-14 17:11:53 瀏覽:68
linuxvim插件 發布:2025-09-14 17:11:04 瀏覽:949
linux導航 發布:2025-09-14 17:08:57 瀏覽:509
問道登陸器源碼 發布:2025-09-14 17:08:01 瀏覽:912
為什麼安卓手機總是提示軟體停運 發布:2025-09-14 17:01:27 瀏覽:969
破解exe加密視頻軟體 發布:2025-09-14 16:44:18 瀏覽:287