まず、バブルソート:
パブリック 静的 ボイドバブルソート(INT [] ARR)が{
ためには、(INTは、I <arr.length; iが1 = I ++ ){
ため(INT J = 0; J <arr.length-I; J ++ ){
場合(ARR [J ]> ARR [J + 1 ]){
int型の TEMP = ARR [J]。
ARR [J] = ARR [J + 1 ]。
ARR [J +1] = TEMP。
}
}
}
}
せいぜいバブルソートはO(n)はトリップ時間の複雑さに排出されます。
((N-1)* n個)の旅に必要なサイクルあたりの最悪の事態はちょうど逆の順番に必要なサイクルである(N-1)回(N-1-I)倍の時間複雑/ 2はO(nは^ 2)
したがって、平均バブルソートの時間計算量はO(N ^ 2)です。
第二に、ソートを選択します。
公共 ボイド selectSort(INT [] A){
ため(INT I = 0、I <a.length; I ++ ){
int型 K = I。
用(INT J = I + 1、J <a.length; J ++ ){
場合([J] < [K]){
K = J。
}
}
もし(K> I){
int型温度= [I]。
[I] = [K]。
[K] = TEMP。
}
}
}
好ましくは、選択ソート、最悪平均時間計算量は次のとおりはO(n ^ 2)
第三に、クイックソート:
パブリック 静的 INT []のqsort(INT ARR []、int型開始、int型エンド){
int型ピボット= ARR [開始]。
int型のI = 始めます。
int型 J = 終了。
一方、(I < J){
一方((I <J)&&(ARR [J]> ピボット)){
J - 。
}
一方、((I <J)&&(ARR [I] < ピボット)){
I ++ 。
}
もし((ARR [I] == ARR [J])&&(I < J)){
I ++ 。
} 他{
int型の TEMP = ARR [I]。
ARR [I] = ARR [J]。
ARR [J] = TEMP。
}
}
もし(I-1>開始)ARR = qソート(ARR、開始、I-1 )。
もし(J + 1 <エンド)ARR = qソート(ARR、J + 1 、エンド)。
リターン(ARR)。
}
最坏的情况是,每次所选的中间数是当前序列中的最大或最小元素
长度为n的数据表的快速排序需要经过n趟划分,使得整个排序算法的时间复杂度为O(n^2)
理想的情况是,每次划分所选择的中间数恰好将当前序列几乎等分,经过logn趟划分,时间复杂度为O(nlogn)
平均情况下:T(n)=2*T(n/2)+n; 第一次划分
=2*(2*T(n/4)+n/2)+n; 第二次划分 (=2^2*T(n/4)+2*n)
=2*(2*(2*T(n/8)+n/4)+n/2)+n; 第三次划分(=2*3*T(n/8)+3*n)
=.....................
=2^m+m*n; 第m次划分
因为2^m=n,所以等价于 = n+m*n
所以m=logn,所以T(n)=n+n*logn;
快速排序的平均时间复杂度是O(n*logn)