快速排序理解

2021-10-03 19:28:51 字數 1213 閱讀 3900

每次處理好 某個 標桿 數字 在 最終 陣列 中的位置。

然後 每個 數字 依次 作為標桿數,都找到 自己的 位置。

相比 氣泡排序

冒泡 是每次找 最大數字的 位置,找好後 ,在 不包含最大 數字的 陣列中,再 次找 當前最大數的 位置。

快速 排序 是 找 指定 標桿數 的位置。

標桿數 可以是任意乙個數字。 一般取 最左或最右的 那個數字作為標桿數。

快速排序,就是先選定乙個數作為標桿數,這裡選的是最後乙個數字。

然後從這個數字之外 去考慮。

這裡從小到大 來排序。

這個數字之外的 數列,從左,右 兩頭開始。 左右分界線左後確定

左邊的數字要 小於這個數 就算符合要求。 也就是左小

右邊的數字要 大於這個數 就算符合要求。 也就是右大

然後先從左往右看,找到第乙個大於這個標桿數 的數字,這是乙個不滿足 要求的數字,稱為左大數。需要處理掉,使其符合要求,變為 左小。

就是 找符合條件的數字 來換掉 不符合 條件的 數字。

處理的方式 一般只有 換掉 左大數 這種方法 最合適。

那麼找哪個數字來換掉呢??

首先確定拿來替換的 數字 必定要滿足 左小。

也就是必定 用 左小 來換掉 左大數

那麼替換這個 左大數 的數字最好也是乙個不符合 他自己佔位要求的數字,

這麼 替換後 相當於同時解決了 兩個問題。

所以 考慮到 右邊 需要的數字是 右大 ,那麼可以 找乙個 右小。

用 右小 來 替換 左大。

使得 左大 變為 左小,右小 變為 右大。

目的就是 對於某個位置,使得

其左邊的數字都小於 標桿數

其右邊的數字都大於 標桿數。

然後把 標桿數 放到這個位置。

這樣標桿數 就找到了 自己的 正確位置。

標桿數的 位置 就不會 再發生變化。

在最終排序好後的 有序數列 中,他依然是 那個位置。

快速排序理解

include include stdafx.h define n 7 void print2 int a printf n void sort int data,int left,int right int i left int j right int key data i while i j 左...

理解 氣泡排序 快速排序

練習 second text hao long 片.建立乙個結構體,用來儲存姓名和分數 typedef student student intmain for int i 0 i num 1 i for int i 0 i num i getchar getchar 用來暫停程式,以便檢視程式輸出的...

快速排序的理解

快速排序是對氣泡排序的一種改進。它的基本思想是通過一趟掃瞄後,使得排序序列的長度能大幅度地減少。通過一趟掃瞄,確保以某個數為基準點的左邊各數都比它小,右邊各數都比它大。然後又用同樣的方法處理它左右兩邊的數,直到基準點的左右只有乙個元素為止。簡單的說就是 找乙個基準數 待排序的任意數,一般都是選定首元...