排序在整個acm比賽過程中,都有著不可或缺的重要意義,當處理一組資料,解決之後的問題時,往往先要通過排序將資料規格化從而為之後的**做鋪墊,使得後面的資料處理大大簡化。如果學不會排序,後面的步驟往往無從下手,甚至寸步難行。
從深遠意義上來講,以後在找工作,面試過程中,在一面、二面的技術麵中,面試官很傾向於給你一堆資料進行排序,從而引發出來後面的問題。當然,每種排序演算法的時間複雜度也是要掌握的,這對於以後比賽中估計會不會超時有著重要的作用。
當然,在龐大的c++類庫中可以使用現有的排序函式進行排序,但是了解和掌握必備的排序方法是每乙個程式設計師必備的知識。
演算法思想簡單描述:
在要排序的一組數中,對當前還未排好序的範圍內的全部數,自上而下對相鄰的兩個數依次進行比較和調整,讓較大的數往下沉,較小的往上冒。即:每當兩相鄰的數比較後發現它們的排序與排序要求相反時,就將它們互換。
**實現
for (i = 0; i < n - 1; i++)
}}
參考部落格 ******演算法思想簡單描述:
首先以乙個元素為基準,從乙個方向開始掃瞄,比如從左到右掃瞄,以a[0]為基準,接下來從a[0]….a[9]中找出最小的元素,將其與a[0]交換。然後將其基準位置右移一位,重複上面的動作,比如,以a[1]為基準,找出a[1]~a[9]中最小的,將其與a[1]交換。一直進行到將基準位置移到陣列最後乙個元素時排序結束。
**實現
for(i=0;ia[j])
min=j;//交換
if(min!=i)
}
參考部落格 ******
演算法思想簡單描述:
在得到要排序的陣列以後,將陣列分為兩個部分,陣列的第乙個元素為乙個部分,剩下的元素為一部分,然後從陣列的第二個元素開始,和該元素以前的所有元素比較,如果之前的元素沒有比該元素大的,那麼該元素的位置不變,如果有元素的值比該元素大,那麼記錄下它所在的位置;例如i,該元素的位置為k,則將從i到k位置上的所有元素往後移動一位,然後將k位置上的值移動到i位置上。這樣就找到了k所在的位置。每乙個元素都這樣進行,最終就會得到排好順序的陣列。
**實現
voidinsert_sort(int*array,unsignedintn)
*(array+j) = temp;
}}
參考部落格
二分查詢又稱折半查詢,採用了分治策略,優點是比較次數少,查詢速度快,平均效能好;其缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有序列表。首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功;否則利用中間位置記錄將表分成前、後兩個子表,如果中間位置記錄的關鍵字大於查詢關鍵字,則進一步查詢前一子表,否則進一步查詢後一子表。重複以上過程,直到找到滿足條件的記錄,使查詢成功,或直到子表不存在為止,此時查詢不成功。
**實現
void binsearch(int *a, int k, int len)//陣列a預設為遞增,k為需要查詢的元素,len為陣列長度
if (a[mid] > k)
else
}}
參考部落格 鄭州大學研究生院 鄭州大學產業技術研究院
鄭州大學產業技術研究院是鄭州大學根據學校向研究型大學轉型的需要而成立的集學科建設 科學研究與研究生培養為一體的科研機構。研究院架構在資訊工程學院 電氣工程學院 鄭州智慧型城市研究院 籌 和軟體技術學院之上,以建設優勢特色學科為抓手,培養高層次人才為使命,是鄭州大學電氣資訊類學科的科學研究和高層次人才...
煙台大學acm暑期集訓總結
從7月15號暑假開始,我們煙大的acm暑期集訓也就算是正式開始了。我們學校的學習環境還是相當不錯的,我們在裡面可以安靜的做題,以前我們集訓都是一邊上課一邊做題,現在終於可以一整天的在實驗室裡做題。不過我感覺我乙個暑假的訓練還是比較失敗的,可能因為從青島回來感覺比賽已經差不多結束了,所以壓力小了很多。...
ACM暑期集訓2
今天主要學習了線性dp和揹包問題以及快速冪。1.整數快速冪 這個直接粘上 int qpow int x,int n res res res n n 1 return ans 2.矩陣快速冪 主要就是將整數快速冪的乘法運算換做矩陣的乘法 下面的 是方陣的快速冪 const int n 10 int t...