十種排序演算法的基本特性:
排序演算法
平均時間複雜度
最好情況
最壞情況
空間複雜度
排序方式
穩定性快速排序
ο(nlogn)
ο(nlogn)
ο(n2)
ο(logn)
in-place
不穩定歸併排序
ο(nlogn)
ο(nlogn)
ο(nlogn)
ο(n)
out-place
穩定堆排序
ο(nlogn)
ο(nlogn)
ο(nlogn)
ο(1)
in-place
不穩定shell排序
ο(nlogn)
ο(nlog2n)
ο(nlog2n)
ο(1)
in-place
不穩定插入排序
ο(n2)
ο(n)
ο(n2)
ο(1)
in-place
穩定氣泡排序
ο(n2)
ο(n)
ο(n2)
ο(1)
in-place
穩定選擇排序
ο(n2)
ο(n2)
ο(n2)
ο(1)
in-place
不穩定計數排序
ο(n+k)
ο(n+k)
ο(n+k)
ο(k)
out-place
穩定桶排序
ο(n+k)
ο(n+k)
ο(n2)
ο(n+k)
out-place
穩定基數排序
ο(n*k)
ο(n*k)
ο(n*k)
ο(n+k)
out-place
穩定*穩定性:多個相同的值的相對位置在演算法結束時是否產生變動。
一、快速排序
實現:
//遞迴法
private
static
intquickone
(int data,
int left,
int right)
data[left]
=key;
return left;
}private
static
void
quicktwo
(int data,
int left,
int right)
public
static
void
quicksort1
(int data)
public
static
void
quicksort2
(int data)
if(mid+
1//右序列有兩個以上元素時,將右序列的首尾下標入隊
}}
二、歸併排序
三、堆排序
四、shell排序
實現:
public
static
void
shellsort
(int data)
} k--;}
}
五、插入排序
實現:
//普通插入排序
public
static
void
insertionsort
(int data)
data[j]
=t;}
}
//折半插入排序
public
static
void
binarysort
(int data)
else
if(data[mid]
< key) low = mid+1;
else
if(data[mid]
> key) high = mid-1;
}}high++
;for
(int k=i;k>high;k--
) data[k]
=data[k-1]
; data[high]
=key;
}}
//偽冒泡插入排序
public
static
void
insertionsort2
(int data)
else
break;}
}}
六、氣泡排序
實現:
public
static
void
bobsort
(int data)
} len--;}
}
七、選擇排序
實現:
//選擇排序
public
static
void
selectionsort
(int data)
}}}
排序演算法總結(java實現)
排序演算法的分類如下 1.插入排序 直接插入排序 折半插入排序 希爾排序 2.交換排序 冒泡泡排序 快速排序 3.選擇排序 直接選擇排序 堆排序 4.歸併排序 5.基數排序。關於排序方法的選擇 1 若n較小 如n 50 可採用直接插入或直接選擇排序。當記錄規模較小時,直接插入排序較好 否則因為直接選...
排序演算法實現及總結
1 氣泡排序 時間複雜度 最壞情況和平均情況 o n 最好情況 o n 屬於穩定排序 void bubble sort vector int nums if flag 0 break return 2 選擇排序 時間複雜度 最壞情況,最好情況,平均情況 o n 不是穩定排序 適用於資料量小的或有部分...
java實現的排序演算法總結
網上查了好多資料,不同排序演算法的實現可能有多種,但網上有一些放到 中無法執行,各種錯誤,並且有些並不是最優演算法,以下為本人整理的比較靠譜的 1 快速排序 public class quicksort i low j hight index a i 用子表的第乙個記錄做基準 while i j a...