最近在實驗室恰逢師兄師姐們的校招季,會有很多面試筆試題考一些基本的演算法,其中較為常用的就是排序演算法,當然這裡指的僅僅是內部排序,處於複習的目的,回顧了一下在大二時候學習的一些排序方法,算是乙個記錄
內部排序大概來說有10種,分別是,選擇排序,氣泡排序,插入排序,歸併排序,氣泡排序,基數排序,堆排序,桶排序,計數排序,布林排序,今天主要說一說最常用的前面五種演算法,也是面試或者筆試中較為常用的
話不多少,**奉上,基本的說明都在注釋裡面交代了
/*author:luchi
date:2015/10/22
*/#includeusing namespace std;
void printresult(int* a,int n,char* type)
} }
}/*insertionsort
*/ void insertionsort(int* a,int n)else break;
} a[j+1]=cur;
} printresult(a,10,"insertionsort");
}/*mergesort
遞迴排序,講乙個陣列分成兩個部分,對這兩個部分的資料進行排序,然後將兩部分的
(此時已經是有序的)進行merge操作,也就是重新合併成乙個有序的陣列
t(n)=2t(n/2)+o(n)
遞推可以知道時間複雜是lg(n)*n
*/void merge(int * a,int begin,int mid,int end)
}else
} for(int i=begin;i<=end;i++)
}void mergesort(int * a,int begin,int end)
/*quick_sort
快速排序屬於較為重要的排序
基本思想就是對於乙個數字,首先以第乙個元素組為基準,
比他小的放在左邊,比他大的放在右邊
然後分別對左右兩邊再進行以上操作即可
*/void quicksort(int*a,int begin,int end){
if(begin>=end)return;
int seperator=a[begin];
int count=0;
for(int i=begin+1;i<=end;i++){
if(a[i]今晚已經有點晚了,後面五種排序過些日子再弄出來
內部排序 堆排序
堆實際上是一棵完全二叉樹,其任何一非葉節點滿足性質 key i key 2i 1 key i key 2i 2 或者key i key 2i 1 key key 2i 2 即任何一非葉節點的關鍵字不大於或者不小於其左右孩子節點的關鍵字。堆分為大頂堆和小頂堆,滿足key i key 2i 1 key ...
內部排序 氣泡排序
內部排序 氣泡排序。n個記錄進行氣泡排序的基本方法是 首先將第乙個記錄的關鍵字和第二個記錄的關鍵字進行比較,若為逆序,則交換這2個記錄的值,然後比較第二個記錄和第三個記錄得關鍵字,以此類推,直到第n 1個記錄和第n個記錄得關鍵字比較過為止。上述過程稱為第一趟氣泡排序,其結果是關鍵字最大的記錄被交換到...
內部排序回顧Java版(一)
近日複習內部排序,仔細體會了嚴蔚敏老師的資料結構,深受啟發,總結如下 1 緒論 排序有兩大操作組成,一是比較關鍵字大小,這個不可避免,二是將記錄從乙個位置移動到另乙個位置,這可通過儲存方式來盡力避免。總的來說排序分為以下幾種 內部排序和外部排序,而內部排序分為插入排序,2 插入排序 2.1 簡單插入...