排序演算法 1

2021-07-24 17:05:05 字數 1017 閱讀 4234

- 快速排序

先上源**

void sort (int a[30], int

left, int

right)

while(i < j)

a[i] = a[j];

while(i < j && key >= a[i])

a[j] = a[i];

}a[i] = key;

sort(a, left, i-1);

sort(a, i + 1, right);

}

先找乙個基準點key

從後面向前面找,找到乙個比它小的a[j],就把a[j]放到a[i]的位置,這個時候不用擔心資料被覆蓋的問題,因為在一開始,a[i]儲存在key裡面了

int key=a[left];
之後,再正向找,找到後,依舊直接賦值;直到i=j

這個時候,a[i]這個位置就會空出來,自然就可以將key賦到這個位置了,而此時的a[i]左邊全部是比它小的,右邊比它大,第一輪排序就結束了。

再分別對a[i]左右的數進行這樣的操作,直到left==right,即只剩乙個數的時候,快速排序實際上就進行完了。

一開始不是很理解為啥可以直接賦值呢【笑哭】,後來,我看到了這個圖:

這裡看到那兩個圖的,這個大大還把快排改良了,可惜我現在還沒看懂…

對!開始的時候把基準點拿出來儲存好,這樣裡面就空了乙個位置,可以把值賦來賦去而且不用擔心資料丟失!

其實快排的思路還是蠻簡單的,就是找基準點的位置(把前後分開的位置),然後再找再找,找著找著就排完序了【笑哭】。唯一懵逼的就是那個賦值的事情…這個樣子的話,快排算是搞懂了^_^。

希望…自己表達清楚了哈!

排序 排序演算法1

所謂氣泡排序就是,一組資料,以遞增的順序來說明,從第乙個數data 0 開始,依次和後面的資料比較大小,如果data 0 大於當前位置上的數就和這個數交換位置並繼續和後面的數相比,如果遇到比自己大的數了,就不交換 下一次開始的位置是data 1 然後依次往後推。void myswap int num...

排序演算法 1 選擇排序演算法

這篇部落格分為兩個部分 選擇排序演算法基本思想 實現與解析 由於這個排序演算法比較簡單,因此這篇博文就不做過多解釋了 一.選擇排序演算法基本思想 1 選擇排序 小到大排序 1.遍歷所有未排序的元素 找到最小的那個元素 2.將這個元素與未排序序列的第乙個元素交換位置 3.當剩下乙個元素時 排序結束 o...

排序演算法 1

二 高階排序演算法 高階排序演算法中我們將只介紹這一種,同時也是目前我所知道 我看過的資料中 的最快的。它的工作看起來仍然象乙個二叉樹。首先我們選擇乙個中間值middle程式中我們使用陣列中間值,然後 把比它小的放在左邊,大的放在右邊 具體的實現是從兩邊找,找到一對後交換 然後對兩邊分別使 用這個過...