日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java 部分正确性_深入理解java快速排序的正确性

發(fā)布時間:2025/3/19 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 部分正确性_深入理解java快速排序的正确性 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

說起快速排序,很多人都能夠寫出一個正確的快速排序,但就快速排序的正確性,就無從探究了。為什么說寫出來的快速排序就是正確的。在快速排序中間的關鍵幾步,以什么樣的數(shù)據組織來保障快速排序的正確性。本文以《數(shù)據結構與算法 Java語言描述》中所描述的快速排序來進行理解,以查看其中的正確性。

首先查看排序的整體偽代碼:

其中,中間所涉及的med算法如下所示:

以上即整個快速排序算法以及相對應的獲取pivot的算法。

那么我們首先從源碼上分析整個排序算法的正確性,以及在特殊的控制點上是如何取得正確的(在后續(xù)的說明中 小于的意思為小于或等于 大于的意思為大于或等于,即不對=pivot的數(shù)進行特殊處理)。

第1步

判斷適用于快速算法的必要性,我們知道在一定范圍之內,快速排序是不如插入排序的。這個范圍依賴于具體的算法步驟分析。在本文中,這個范圍被設定為CUTOFF,即如果這個排序的范圍在CUTOFF之內,則就不再使用快速排序進行排序,而是直接使用插入排序對數(shù)據進行排序。排序完畢之后,即整個數(shù)組排序完畢。而且還有一個作用,即后續(xù)的排序方法中,整個數(shù)組的排序范圍一定在大于CUTOFF處,這就保證了能夠取得足夠的數(shù)進行計算。

第2步

取得正確的pivot,即選出一個數(shù)據,來作為數(shù)組分組的中間數(shù)。在整個排序過程中,比這個數(shù)小(或等于)的數(shù)將排在數(shù)組的左邊,而比之大(或等于)的數(shù)將排在右邊。這個選擇的過程由方法med(int[],int,int)來完成。它選擇整個數(shù)組中最左邊,最右邊,以及中間的數(shù)進行比較,將處于中間數(shù)年作為pivot。

然后,在上面的med算法中,這個過程還將作更多的工作,這個工作即是對這三個數(shù)進行排序,保證最小的數(shù)放在a[left]位置上,最大的數(shù)放到a[right]上,而中間的數(shù)放在a[center]上。并且返回a[center]這個數(shù)。

值得注意的是,算法將a[center]和a[right-1]即倒數(shù)第二個數(shù)進行交換。

通過解讀后面的算法得知,在進行a[left],a[center],a[right]之間的數(shù)據交換之后,在后續(xù)的判斷當中,將不再對a[left],a[right]進行數(shù)據判斷和交換工作,因為在這里已經作了一次處理了。而將a[center]與a[right-1]作為交換,是因為要將a[center]放到數(shù)組的最后,避免在數(shù)據處理過程中被交換了。

第3步,第4步

整個排序的核心部分,即比較并交換部分。首先,將左起點設為left,右起點設為right-1。但這兩個點的數(shù)并不參與比較,因為在前面的med算法中已經進行處理過了。我們知道left比pivot,right-1即為pivot,而right比pivot大。所以在整個循環(huán)過程中,首先即對起點進行了+1操作,以將比較操作往前+1,以跨過最開始的起點。我們來看這兩個比較和交換的代碼:

第一個正確性:i和j永遠不會越界,這是因為a[right]是比pivot大的,所以i一定會停止,而a[left]是比pivot小的,所以j也一定會停止。當兩種情況的任意一種產生時,在后續(xù)的比較中,都會停止while,而導致i和j最終停止處理。

第二個正確性:當這兩次比較過程中,i和j的位置有3種情況。ij。

對于第一種情況,即i和j沒有相遇,這是最常見的一種情況。在沒有相遇的情況下,a[i]所處的點,大于pivot,而a[j]所處的點小于pivot,這時將在后續(xù)處理中,交換這兩個點,并且將在下一次循環(huán)中再一次移動i和j。

對于第二種情況下,即a[i]=a[i]=pivot,這時,并不需要交換i和j,因為它們本身即在同一個點上。

對于第三種情況,即在相遇時碰到的最常見的情況,即a[i]在一個比pivot大的一個點上,而當j=i的情況,判斷出a[j]大于pivot,而自然進行下一步的–操作,這時即產生了i>j的情況,通常情況下都是i=j+1,即j在i有前一格。

對于上面的三種情況,第二種情況和第三種情況,均會使得while循環(huán)中止,對于第一種情況,將繼續(xù)進行循環(huán),最終達到第二種或第三種情況以達到中止的狀態(tài)。

第三個正確性:即在未發(fā)生第4步的交換之前,i之前(不包括i)的數(shù)據均小于pivot,而j之后的數(shù)據均大于pivot。

第四個正確性:在發(fā)生了交換之后,仍然保持第三個正確性。這是因為,交換過程中,并沒有發(fā)生i和j的改變,第三個正確性仍然成立。

第5步

我們現(xiàn)在來分析一下,while中止時i所處的點對于pivot以及i之前的數(shù)據的情況。這個情況有利于分析第5步操作的必要性和正確性。

第一種情況:在通常的情況下,即第3步,第4步的操作過程中,i和j在數(shù)組的中間相遇。由上面的第3步,第4步分析過程中的第二正確性可以看出整個最外層的while(循環(huán)均會在當i=j或ipivot時循環(huán)才會退出)。而第三,四正確性保證了以i作為分界線兩邊數(shù)據被分成了2組,即a[i]大于pivot。

第二種情況:i從最開始的內層循環(huán)開始就沒移動過,即i在left+1處,[left+1,rithg-2]均大于pivot,這種情況下。仍然滿足以上的

特殊,因為a[left]小于pivot,而a[i]=a[left+1]大于pivot。

第三種情況:j從最開始的內層循環(huán)就沒移動過,即j在right-2處,而此時i則在right-1處,即[left+1,right-2]均大于pivot。這種情況下,仍然滿足以上的情況,因為a[left]小于pivot,而[left+1,right-2]均小于pivot,a[i]=a[right-1]大于(這里大于等于被認為大于)pivot。

由于上面三種情況下,均滿足a[i]大于pivot,且i之前的數(shù)據均小于pivot,所以i自然地被認為是整個數(shù)組劃分點的中點。且下一步的操作要將比較數(shù)移到正確的位置上來(它原來在right-1處)。 由于i點即為分界點,且a[i]大于pivot,所以這里,將兩個點的數(shù)據交換,即a[i]為pivot,而原來的a[i]被移到a[right-1]處,仍然滿足i之前的數(shù)據小于pivot即a[i],而i之后的數(shù)據大于pivot即a[i]。在之前的判斷中,均以pivot為比較,現(xiàn)在終于可以將pivot放到正確的地方了,即a[i]處。

第6步

在第5步之后,i作為分界點,分相應的數(shù)據已經劃到正確的位置上,滿足i之前的數(shù)據比a[i]小,i之后的數(shù)據比a[i]大,所以分別對前部分進行排序,對后部分進行排序。

整個排序部分結束。

在整個排序過程中,正是由正確而緊湊地代碼保證了排序的正確性,包括pivot的尋找,以及下限和下限的保證,確保在過程中不會出現(xiàn)越界以及交換錯誤的情況出現(xiàn)。

相關文章:

作者: flym

I am flym,the master of the site:)查看flym的所有文章

總結

以上是生活随笔為你收集整理的java 部分正确性_深入理解java快速排序的正确性的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久精品视频观看 | 激情黄色小说网站 | 国产毛片3 | 先锋成人 | 欧美乱大交xxxxx潮喷l头像 | 性视频在线 | 动漫3d精品一区二区三区乱码 | 成人无码精品1区2区3区免费看 | 国产女主播喷水高潮网红在线 | 欧美日韩欧美 | 中文字幕人妻色偷偷久久 | 亚洲五十路 | 一区二区成人在线观看 | 99在线精品视频免费观看软件 | 性色av一区二区三区四区 | 成人爽a毛片一区二区 | 亚洲另类图区 | av一级二级 | 日韩精品一级 | 午夜怡红院| 韩国电影一区 | 久久久精品一区二区三区 | 悟空影视大全免费高清观看在线 | 日韩国产成人无码av毛片 | 日韩视频一区二区三区 | 欧亚在线视频 | 波多野结衣亚洲一区 | 久久丫精品久久丫 | www.桃色av嫩草.com | 日本无遮挡边做边爱边摸 | 成人亚洲一区 | 国产伊人自拍 | 亚洲 小说 欧美 激情 另类 | 日韩欧美爱爱 | 日韩一二三四 | 亚洲精品~无码抽插 | 最好看的2019中文大全在线观看 | 国产二区电影 | 一级性视频 | 国产精品第二页 | 婷婷在线免费视频 | 人妻丰满熟妇无码区免费 | 波多野结衣电影免费观看 | 精品国产一二区 | 亚洲视频中文字幕 | 在线视频中文 | 女人脱了内裤趴开腿让男躁 | 亚洲福利视频一区二区 | 欧美性猛交xxxx乱大交蜜桃 | 久操成人 | 胖女人毛片 | 亚洲三级视频在线观看 | 国产传媒一级片 | 四虎精品影视 | 日本高清免费视频 | 中文字幕一区二区三区人妻不卡 | 在线观看精品国产 | 激情五月婷婷在线 | 激情文学欧美 | 97热久久 | 午夜激情视频在线观看 | 久久久久久欧美 | 黄色一级片在线 | 一区免费在线观看 | 97超碰人人看 | 人人澡人人添 | 国产二区三区视频 | 国产女人18水真多毛片18精品 | 激情小视频| 久久久影视 | 婷婷久久网 | 老司机深夜福利视频 | 午夜在线精品偷拍 | 男男受被啪到高潮自述 | 狠狠躁夜夜躁人爽 | 欧美性猛交xx乱大交 | av大片在线播放 | 亚洲欧美黄| 久久久久亚洲av片无码 | 国产99久久久久久免费看 | 国产一区二区三区精品愉拍 | 亚洲精品国产一区二 | 午夜精品免费视频 | 国产偷人 | 黄色理伦片 | 亚洲自拍偷拍网站 | 成人av视屏| 精品中文一区二区三区 | 茄子视频A| 美女诱惑一区 | 一区二区三区国产精品视频 | 亚洲精品在线视频观看 | 日韩欧美高清在线观看 | 日日夜夜添 | 99视频免费看 | 久草视频播放 | 欧美a一级片 | 亚洲欧美日韩免费 | 999国产视频 |