丰富自己的代码库-快速排序
一些常用的代碼,和demo一定要保留,對(duì)于一個(gè)程序員的成長(zhǎng)就是不斷 學(xué)習(xí),實(shí)踐,積累,除了少數(shù)的天才外, 絕大多數(shù)程序員的發(fā)展都要經(jīng)歷的幾步,這里重點(diǎn)說(shuō)一下積累,看到一些好的代碼活著功能復(fù)雜的算法,方法,就把它收到自己的代碼庫(kù)里,至于自己的代碼庫(kù) 其實(shí)就是個(gè)本地文件夾,級(jí)別上應(yīng)該跟 你自己的代碼平級(jí),建議存成.hpp文件,即頭文件里包含實(shí)現(xiàn),這樣既保留了源碼,也可以快速引用。同時(shí)這個(gè)文件夾最好添加的環(huán)境變量中,以便使用的時(shí)候直接引用
?
下面來(lái)說(shuō)說(shuō)放入代碼庫(kù)的第一個(gè)算法程序,快速排序,網(wǎng)上對(duì)于這個(gè)解釋很多,其中有些是大而化之,看了根本不知所謂,學(xué)習(xí)算法還是重點(diǎn)了解過(guò)程,編碼終究是個(gè)小事兒。
快速排序 的過(guò)程其實(shí)很簡(jiǎn)單,
用我自己理解的方式解釋就是
首先 以第一個(gè)節(jié)點(diǎn)為準(zhǔn)(key),以某種手段讓key交換到自己排序后應(yīng)該在的位置上,同時(shí)保證左邊的數(shù)都小于這個(gè)key,右邊的數(shù)都大于這個(gè)key(如果是從大到小排序則是左邊的都大于key右邊的都小于key)
如 集合 {3,1,5,2,4} 經(jīng)過(guò)上述處理就回得到結(jié)果 {1,2,3,5,4} 也就是說(shuō)3(key)已經(jīng)抵達(dá)正確為止,同時(shí)把比三小的都放到了左邊,比三大的都放到了右邊
遞歸key的左邊 子集 直至剩下一個(gè)元素為止
遞歸key的右邊 子集 直至剩下一個(gè)元素為止
以下為代碼實(shí)現(xiàn)
template <typename T>
void QuickSort(T a[],int low,int high)
{
if(low >= high)return;
if(!a)return;
int first = low;
int last = high;
int key = a[first];
while(last>first)
{
while(last>first&&a[last]>=key)
{
last--;
}
a[first] = a[last];
while(last>first&&a[first]<=key)
{
first++;
}
a[last] = a[first];
}
a[first]=key;
QuickSort(a,low,first-1);
QuickSort(a,first+1,high);
}
轉(zhuǎn)載于:https://www.cnblogs.com/yangyang12138/p/6073106.html
總結(jié)
以上是生活随笔為你收集整理的丰富自己的代码库-快速排序的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【黑金ZYNQ7000系列原创视频教程】
- 下一篇: 并不算复杂的正则表达式基础