㈠ 排序演算法高手幫忙選一種最快的排序方法
內存排序演算法中最常用的演算法是快速排序演算法,時間復雜度是Onlogn,其它的幾個演算法,如插入排序、堆排序的時間復雜性都是這個值。
正常排序問題可以用堆排序,或者快排序,但這些演算法實際上都是在數據隊列已知的情況下的演算法,你實際需要的是一個記錄插入效率較高的演算法,插入排序應該也不錯的。
當然也可以進行一定優化,就是在產生數值有一定范圍的情況下對數值區間進行分桶,產生數值後直接在指定的桶中應用以上排序演算法。
另外,用數組的效率要比鏈表高
㈡ 請問常用排序演算法的效率誰最高
折半排序法,也叫二分歸並排序:
程序如下:
#include <stdio.h>
void merge(int a[],int p,int q,int r)
{
int n1=q-p+1,n2=r-q,i,j,k;
int l[1002],R[1002];
for (i=1;i<=n1;i++)l[i]=a[p+i-1];
for (j=1;j<=n2;j++)R[j]=a[q+j];
R[n2+1]=l[n1+1]=999999;
i=j=1;
for (k=p;k<=r;k++)
{
if (l[i]<=R[j])
{
a[k]=l[i];
i++;
}
else
{
a[k]=R[j];
j++;
}
}
}
void mergesort(int a[],int p,int r)
{
int q;
if (p<r)
{
q=(p+r)/2;
mergesort(a,p,q);
mergesort(a,q+1,r);
merge(a,p,q,r);
}
}
int main()
{
int a[1001],t,n,i;
scanf("%d",&t);
while (t--)
{
scanf("%d",&n);
for (i=1;i<=n;i++)scanf("%d",&a[i]);
mergesort(a,1,n);
for (i=1;i<=n;i++)
{
printf("%d",a[i]);
if (i!=n)printf(" ");
}
printf("\n");
}
return 0;
}
這個程序是先輸入有幾組數據。然後是一個整數,表示這組數據有幾個數,然後再輸入幾個數就行了。
這個就是不斷2分歸並的排序演算法
㈢ 排序演算法中最快的一種
首先它是一種排序演算法,排序演算法是為了讓無序的數據組合變成有序的數據組合。
有序的數據組合最大的優勢是在於當你進行數據定位和採用時,
會非常方便,因為這個數據是有序的
從而在代碼設計的時候會讓你避免很多不必要的麻煩,
因為無序數據你在進行推斷數據前後關系的時候會顯示很繁瑣
快速排序是排序中的一種,它在最差情況下和別的排序相差不大
而在最優,一般情況下,會比一般的排序方法更節省時間
這里的一般排序是指:起泡,希爾,插入等常規排序方法
㈣ 常見的排序演算法哪個效率最高
快速排序法。
㈤ 有10萬個學生的成績,成績在0-100之間,對其排序,然後輸出。 請問用哪種排序演算法的效率最高
一般來說,快速排序是萬能的,時間復雜度O(nlogn)
但對於這題來說,由於要排序的元素范圍在0-100之間,所以用【計數排序】可以在O(n)的復雜度完成排序
具體做法是,開一個數組,范圍是0-100,即a[100],依次讀取每一個元素i,將a[i]+1,可知每個元素出現了多少次,然後從0-100依次輸出即可(這是從小到大,從大到小反過來就行了)!
不懂可問,滿意請採納謝謝!
㈥ 世界上最快的排序演算法
Timsort是一個自適應的、混合的、穩定的排序演算法,融合了歸並演算法和二分插入排序演算法的精髓,在現實世界的數據中有著特別優秀的表現。它是由Tim Peter於2002年發明的,用在Python這個編程語言裡面。這個演算法之所以快,是因為它充分利用了現實世界的待排序數據裡面,有很多子串是已經排好序的不需要再重新排序,利用這個特性並且加上合適的合並規則可以更加高效的排序剩下的待排序序列。
㈦ 以下哪種排序演算法對進行的排序最快
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。快速排序通過一趟掃描,就能確保某個數(以它為基準點吧)的左邊各數都比它小,右邊各數都比它大。然後又用同樣的方法處理它左右兩邊的數,直到基準點的左右只有一個元素為止。
幾種排序的時間復雜度,可以參考一下
㈧ 一般來說,最快的排序演算法是() A:歸並排序 B:快速排序 C:插入排序 D:希爾排序
B:快速排序
現在開始,我們要接觸高效排序演算法了.實踐證明,快速排序是所有排序演算法中最高效的一種.它採用了分治的思想:先保證列表的前半部分都小於後半部分,然後分別對前半部分和後半部分排序,這樣整個列表就有序了.這是一種先進的思想,也是它高效的原因.
各個演算法時間復雜度比較:
平均時間復雜度
插入排序 O(n2)
冒泡排序 O(n2)
選擇排序 O(n2)
快速排序 O(n log n)
堆排序 O(n log n)
歸並排序 O(n log n)
基數排序 O(n)
希爾排序 O(n1.25)
㈨ 哪種排序演算法的效率最高
沒有最高,只有更高。不同數據結構有不同演算法,沒有可比性。同一種數據結構才能比
㈩ 在各類演算法中那種演算法排序是最快的
說句實話,沒有最快這一說。
如果不在乎浪費空間,應該是桶排序最快
如果整體基本有序,插入排序最快
如果考慮綜合情況,快速排序更加實用常見(希爾排序、堆排序等各種排序也各有優劣)
一般情況下,冒泡這種排序僅僅是名字起的有趣罷了,不太好用