我對僅使用7個比較對5個項目進行排序非常感興趣。 我想我理解如何做到這一點的理論,但不幸的是我不能將它寫成代碼。 Here I found an example in LISP如何僅使用7個比較對5個項目進行排序
我真的很想理解它,但在我看來,它並不工作。例如數字5,4,3,2,1。
有沒有人請給我一個示例代碼,但不是在LISP?我更喜歡Java或C/C++。這對我在學校真的很有幫助。
謝謝您提前
P.S.對不起,我的英語
編輯: 在這裏,我添加了一些我用Java編寫的代碼。 變量a,b,c,d,e僅用於我在代碼中更好的定位。 我可以爲特定的輸入項目編寫特定的代碼,這沒有問題。 但我不能寫一般的代碼。
public static void sort(int p[]) {
int a = 0;
int b = 1;
int c = 2;
int d = 3;
int e = 4;
if (p[a] > p[b]) {
swap(p,a,b);
}
if (p[c] > p[d]){
swap(p,c,d);
}
if (p[b] > p[d]){
swap(p,b,d);
}
if (p[e] < p[b]) {
if (p[e] < p[a]) {
swap(p,a,e);
swap(p,d,e);
//swap(p,b,d);//BLBE
}else{
swap(p,b,e);
swap(p,d,e);
}
}else {
if (p[e] < p[d]) {
swap(p,d,e);
}
}
if (p[c] < p[b]) {
if (p[c] < p[a]) {
swap(p,a,c);
swap(p,b,c);
}else
{
swap(p,c,b);
}
}else {
if (p[c] > p[d]) {
swap(p,d,c);
}
}
}
如果您瞭解理論,並且您已經嘗試自己編寫一些代碼,那麼我建議發佈您寫的內容並描述您遇到的具體問題。簡單地要求代碼的問題不可能在這裏得到很多答案。 – Grodriguez 2010-11-21 22:14:03
1.編寫一個程序,創建一個二叉樹,插入其中排序的所有數字。這是0 + 1 + 2 + 3 + 4 = 10的比較。 2.修改程序,以便在第四次插入之前,圖形在中間數字周圍平衡。這會給你0 + 1 + 2 + 2 + 3 = 8的比較。 3.修改程序,以便在第五次插入之前,根元素的較大子樹以與第二步中相同的方式進行平衡,這樣可以減少一次比較。 – 2010-11-21 23:10:28
@Rosh:這是答案,你爲什麼不把它作爲一個發佈? – Daniel 2011-02-02 08:22:31