1. 程式人生 > >排序––快速排序(三)

排序––快速排序(三)

在排序––快速排序(二)中假設輸入是一個完全倒序的序列,並給出了一段示例程式碼。該程式碼還存在一些問題,現在進一步討論:

1、假設給定如下序列5、4、4、3並選擇3為軸樞,按照原先給定的程式碼,序列的變化過程如下:

將5和3交換,序列變成3、4、4、5,left=0,right=3;

right=0,left=0,退出迴圈,然後分別呼叫sort(0,-1)以及sort(1,3),當呼叫sort(0,-1)時,原先程式碼

需要改成 ,這樣sort(0,-1)會正常退出,當呼叫sort(1,3)時選擇5為軸樞

會分別呼叫sort(1,2)以及sort(4,3),此時sort(4,3)會正常退出,但是sort(1,2)由於4和4相等,程式最終會進入死迴圈。

所以原先程式碼需要改成,也可以將改成,但是兩種改法只能取其一。

在此基礎上再重新執行一遍:

選擇3為軸樞,按照改正的程式碼,序列的變化過程如下:

將5和3交換,序列變成3、4、4、5,left=0,right=3;

然後left=1,right=0;因此需要改成

繼續執行後會呼叫sort(0,0)以及sort(1,3),其中sort(0,0)正常退出,但是sort(1,3)會出現left=4>right=3的情況。因此需改成。目前給定序列5、4、4、3也能夠正常執行,但是該程式碼還不是一個完全正確的程式碼,還是放到下篇分析