国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

Python快速排序

2020-08-11 07:37:49陳新龍
電腦報(bào) 2020年30期
關(guān)鍵詞:左移右移指針

陳新龍

排序算法我們之前已經(jīng)講過了冒泡排序和選擇排序,今天我們就來學(xué)習(xí)一種新的排序算法:快速排序??焖倥判蚴敲芭菖判虻母倪M(jìn)版本,通過一趟排序?qū)⒁判虻臄?shù)據(jù)分割成獨(dú)立的兩個(gè)部分,其中一部分的所有數(shù)據(jù)要比另外一部分的所有數(shù)據(jù)小,然后按此方法對(duì)兩部分?jǐn)?shù)據(jù)分別進(jìn)行快速排序,整個(gè)過程可以遞歸進(jìn)行,以此達(dá)到整個(gè)數(shù)據(jù)變成有序序列。

首先我們將排序的元素進(jìn)行分區(qū),從排序的元素中設(shè)置一個(gè)基準(zhǔn)(基準(zhǔn)可以任意設(shè)置,但是基本上都是把第一個(gè)數(shù)字設(shè)置為基準(zhǔn)),比基準(zhǔn)大的元素放在右邊,比基準(zhǔn)小的元素放在左邊,將左右兩個(gè)分區(qū)重復(fù)以上步驟直到所有元素都是有序的。所以我們可以把快速排序聯(lián)想成東拆西補(bǔ)或者西拆東補(bǔ),一邊拆一邊補(bǔ),直到所有的元素都達(dá)到有序的狀態(tài)。

待排序元素初始狀態(tài):

把5作為與其他元素比較的基準(zhǔn)元素,設(shè)置兩個(gè)指針left和right。

1. 把5拆到一邊作為基準(zhǔn)元素(第二行數(shù)字為元素的初始狀態(tài));

2. right指針從右向左掃描,首先4和5比較,4<5,拆4,補(bǔ)原元素5的空缺位,left指針右移;

3. 7和5比較,7>5,拆7補(bǔ)元素4的空缺位。right指針左移;

4. 8和5比較,8>5,保持不變,right指針繼續(xù)左移;

5. 5和1比較,1<5補(bǔ)元素7的空缺位,left指針右移,此時(shí)left=right,則將基準(zhǔn)元素5補(bǔ)入到left/right的位置,結(jié)束這一趟拆補(bǔ)過程。

Python代碼部分:

第一步:在代碼中我們先增加一條需要排序的數(shù)列example。并且設(shè)置a:為起始位置,b:為末尾位置,接下來開始快速排序定義,head相當(dāng)于左指針,left相當(dāng)于右指針,base為基準(zhǔn)數(shù)。

第二步:從右往左掃描,通過偏移right指針,尋找比基準(zhǔn)數(shù)小的元素,當(dāng)找到比基準(zhǔn)數(shù)小的元素后,將其賦值給left指針?biāo)诘奈恢谩?p>

第三步:從左向右掃描,通過偏移left指針,尋找比基準(zhǔn)數(shù)大的元素,找到后,將其賦值right指針?biāo)赶虻奈恢谩?/p>

第四步:不斷重復(fù)二三步驟,直到left和right指針重合,這樣所有的元素都被掃描一遍了,將基準(zhǔn)數(shù)賦予重合位置,完成一遍排序,左邊的數(shù)字比基準(zhǔn)數(shù)小,右邊數(shù)字比基準(zhǔn)數(shù)大。

第五步:以之前的基準(zhǔn)數(shù)為分割點(diǎn),對(duì)左右兩側(cè)按照以上的方法進(jìn)行遞歸,最后排序結(jié)束。

快速排序的效率雖然比冒泡排序高,但是它是一種不穩(wěn)定排序法:在一組數(shù)據(jù)中原有A1和A2兩個(gè)相等數(shù)字,不穩(wěn)定排序算法排序后,可能導(dǎo)致排序之后A2反而在A1之前,原有順序顛倒,這就稱為不穩(wěn)定排序。

猜你喜歡
左移右移指針
“水溶液中的離子平衡”的“不一定”
華容道玩法大解密
偷指針的人
太極拳養(yǎng)生八式(上)
少林與太極(2018年8期)2018-08-26 05:53:58
為什么表的指針都按照順時(shí)針方向轉(zhuǎn)動(dòng)
基于改進(jìn)Hough變換和BP網(wǎng)絡(luò)的指針儀表識(shí)別
C語言位運(yùn)算中鮮為人知的事
軟件工程(2014年5期)2014-09-24 11:53:38
ARM Cortex—MO/MO+單片機(jī)的指針變量替換方法
開懷一笑
赤城县| 铜梁县| 民勤县| 婺源县| 丰城市| 临江市| 大田县| 桓仁| 竹山县| 安新县| 浪卡子县| 柳林县| 汉中市| 东阿县| 南木林县| 汤原县| 灵武市| 襄汾县| 安溪县| 郸城县| 双柏县| 基隆市| 保亭| 镇巴县| 沙坪坝区| 苍梧县| 天峻县| 镇原县| 涿州市| 南投县| 望城县| 白城市| 天峻县| 桓台县| 蒲城县| 青浦区| 渭南市| 通河县| 中山市| 贵港市| 罗甸县|