氣泡排序就是按索引逐次比較相鄰的兩個元素,滿足比較條件,則置換,否則不做改變。
其優化手段可以從減少記憶體迴圈和外層迴圈著手。
//最差的冒泡
public
void
sort1
(int
ary)}}
system.out.
println
("total time:"+(
(system.
nanotime()
- starttime)
/1.0e9))
;}
//內層迴圈次數,遞減一次; 因為每次內層迴圈都將較大的值向後交換了
public
void
sort2
(int
ary)}}
system.out.
println
("total time:"+(
(system.
nanotime()
- starttime)
/1.0e9))
;}
//設 bool-flag, 內層迴圈有交換設 true, 外層迴圈條件 while(flag),同樣內層迴圈次數遞減
//當第 n 次內層迴圈有序,就退出外層迴圈
public
void
sort3
(int
ary)
} len--;}
system.out.
println
("total time:"+(
(system.
nanotime()
- starttime)
/1.0e9))
;}
//設 int-flag 與 len, flag=內層迴圈最後的交換位置,len=flag即下次內層迴圈次數小於len
//因為每次內層迴圈都將較大的值向後交換了。當第 n 次內層迴圈有序,就退出外層迴圈
public
void
sort4
(int
ary)
} len = flag;
} system.out.
println
("total time:"+(
(system.
nanotime()
- starttime)
/1.0e9))
;}
//雞尾酒排序、雙向的氣泡排序
public
void
sort5
(int
ary)
} l = tl;
//從左向右比,找到右邊界
for(
int i = l; i < r; i++)}
r = tr;
//兩個內層迴圈,誰前誰後都可以;下面是先找右邊界,再找左邊界
/* for (int i = l; i < r; i++)
}r = tr;
for (int i = r; i > l; i--)
}l = tl;*/}
system.out.
println
("total time:"+(
(system.
nanotime()
- starttime)
/1.0e9))
;}
public
void
sort6
(int
ary)
else
// }
//前 j 個元素間,滿足條件,才交換
for(
int j = i; j >
0&& ary[j]
< ary[j -1]
; j--)}
system.out.
println
("total time:"+(
(system.
nanotime()
- starttime)
/1.0e9))
;}
total time:1.881900637
total time:0.836298415
total time:0.899675507
total time:0.933527785
total time:0.836643484
total time:0.854876703
total time:1.124683979
total time:0.843978482
total time:0.867328103
total time:0.802187341
total time:0.515037643
total time:0.243494017
排序演算法 氣泡排序及優化 Java實現
氣泡排序是一種簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果它們的順序錯誤就把它們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢 浮 到數列的頂端。1.1 演算法描述 1.2 演示 基本的氣...
氣泡排序 python實現及優化
氣泡排序原理 1.比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個 否則,位置不變。2.對每一對相鄰元素做同樣的工作,從開始第一對到結尾的最後一對。最後的元素應該會是最大的數。3.針對所有的元素重複以上的步驟,除了最後乙個。4.持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較...
氣泡排序及優化
氣泡排序的基本思路是 每次將相鄰兩個數比較,將小的調到前頭 本例按照從小到大排序 按此規律如果有n個數,則要進行n 1趟比較。在第1趟比較中要進行n 1次兩兩比較,在第 j 趟比較中要進行 n j 次兩兩比較。實現如下 include define n 10 int main for i 0 i n...