面試筆試中的排序問題

2021-06-29 04:36:28 字數 1424 閱讀 7802

快速排序:

#include#include #define n 100

using namespace std;

int a[n];

void quicksort(int l,int r)

a[x] = num;

if(l < x) quicksort(l,x);

if(x < r) quicksort(x+1,r);

}int main()

return 0;

}

希爾排序:

對於每一趟排序,選取乙個增量,將原陣列分成若干組,對每一組進行插入排序,重複上述步驟,最後一次增量為1。

shell排序方法實質上是一種分組插入方法 ,它的時間複雜度的下界是n*logn。

堆排序:

堆分為大根堆和小根堆,是完全二叉樹。

下面以大根堆為例解釋演算法,大根堆的每個節點的左右兒子節點都不大於它。假設有n個元素,存在a[1-n]。

1、建堆,從最後乙個非葉子節點開始調整堆,直到調整到根節點,建堆完成之後a[1]最大,a[i]>=a[2*i]&&a[i]>=a[2*i+1]。

2、把a[1]和a[n]交換,a[1- (n-1)]是亂序的,之後是有序的

3、調整堆,使其滿足堆的性質(即1)

4、重複上述操作

時間複雜度分析:建堆時間複雜度是o(n),從根節點開始的對調整時間複雜度是logn,一共調整n次,故時間複雜度為nlogn。

#include#define n 100

int a[n];

void swap(int &a,int &b)

void adjustheap(int i,int size)

}void buildheap(int size)//從小到大排序,所以要建最大堆

void heapsort(int size)

}int main()

return 0;}/*

510 2 3 4 1

*/

歸併排序:

二分的思想,遞迴到底層,排序,在合併

#include#include#define n 100

using namespace std;

int a[n],b[n];

void merge_sort(int l,int r)//從小到大排序

if(y > r)

if(a[x] < a[y]) b[j++] = a[x++];

else b[j++] = a[y++];

}for(int i = l; i <= r; i++)

a[i] = b[i];

}int main()

return 0;

}

mysql面試筆試 MySQL面試筆試題集 BAT

01 mysql技術特點?02 mysql預設埠號?03 mysql優勢?04 mysql支援的儲存引擎以及特點?mysql5.7支援 innodb myisam merge memory archive csv performance schema blackhole innodb是目前mysql...

面試筆試題

1 昨天參加一公司筆試,給幾道演算法題整懵了,其實也不難,但好久沒有碰演算法,只是有思路,要讓我在這麼短的時間內寫出程式來還是不行。2 這裡將其中一道稍微複雜一點的演算法題寫下來,以此小結。3 4 題目描述 5 將n個雞蛋放入到m個籃子中去 n m 保證每個籃子中至少乙個雞蛋,然後指定乙個數x,要求...

面試 筆試 解答

sql程式設計 題目 求每一位員工工作時長 公司每位員工打卡時間表a 員工工作時長表b 得到分組時間的最大值 下班時間 select a.id,a.name a.time from select id,name,time from punch group by id desc a group by ...