數據結構第一章討論了一些有關算法的問題.在這一部分再次引入了那個經典的算法--冒泡排序法。
如果讓我來描述一下這個算法的過程的話,我會這樣描述:
從第一個元素開始和依次進行比較,大的那個放在后面,一直到最后一個元素。這樣最后一個元素就會成為最大的那個;除剛才產生的最大的那個元素外,再次從頭開始比較,一直到第一個元素沒得可比為止。
這是我的理解。進而通過這個理解,我可以寫出這個算法來。這沒有問題。但是當我看到原版的算法的時候,我立即就感覺出差別來了:
1 void bubble_sort(int a[],int n)
2 {
3 for(i=n-1,change=TRUE;i>1&&change;--i)
4 {
5 change=FALSE;
6 for(j=0;j<i;++j)
7 if(a[j]>a[j+1]{a[j]<-->a[j+1];change=TRUE;}
8 }
9 }
注意變量change。這里體現的思路是:如果在某一次比較過程中沒有移動任何元素,那么就沒有必要再從頭比較一次了。因為實際上已經得到了一個排好序的數組。
這樣對于相當多的情況來講,減少了很多的不必要操作,自然平均時間復雜程度就降低了。
因為我往往只考慮到比較壞甚至極端的情況(比如完全逆序),所以自然就會忽略這些看上去不太壞,甚至是非常好的情況,這樣一個直接的結果就是讓那些好的情況下的操作也變得繁瑣異常,而僅僅是為了照顧那些比較難于出現的個別異常情況,現在想想,這樣做不可取。日后應當注意。
posted on 2007-06-10 22:34
littlegai 閱讀(516)
評論(0) 編輯 收藏 引用 所屬分類:
我的讀書筆記