C 經典演算法 面試絕殺

2021-06-09 11:40:15 字數 2198 閱讀 5688

1.鍊錶逆序

2.鍊錶合併

3.一棵樹是否某條路徑結點之和等於給定值。並描述演算法複雜度

4.你熟悉的排序演算法並描述演算法複雜度。

快速排序

歸併排序

堆排序

選擇排序

插入排序

氣泡排序

折半插入排序

以下**都能成功通過。

1.鍊錶逆序

#include using namespace std;

struct node

;node* make_link(void);

node* reverse(node*);

void display(node *);

int main()

node* make_link(void)

return head;

}node* reverse(node *head)

head->next=null;

return pre;

}void display(node * head)

coutstruct node

;node *make_list(void);

void display(node *);

void sort(node *);

node *merge(node *,node *);

int main()

node *make_list(void)

return head;

}void display(node *head)

coutwhile(cur2)

int temp=cur->value;

cur->value=min->value;

min->value=temp;

cur=cur->next;

}}node *merge(node *h1,node *h2)

else

}if(cur1)

mcur->next=cur1;

else

mcur->next=cur2;

return h1->value < h2->value ? h1:h2;

}

3.一棵樹是否某條路徑結點之和等於給定值。並描述演算法複雜度

#include using namespace std;

struct node

;node * build_tree(void);

bool find(node *,int);

int main()

4.你熟悉的排序演算法並描述演算法複雜度。

快速排序

#include using namespace std;

int partition(int a,int low,int high)

while(low < high && a[low] <= key)

++low;

}return low; //返回杻軸所在的位置

}void qsort(int a,int b,int e)

}int main()

; qsort(a,0,5);

for(int i=0;i<6;i++)

coutvoid display(int a,int size)

for (i=length-1; i>0; i--)

}//testcase

int main()

; heapsortdata(sortdata, 8);

for (int i=0; i<8; i++)

}int main()

; for(int i=0;i<8;i++)

cout

for(int i=0;i<8;i++)

cout

}

C 經典演算法面試題

static intsum int x static void sort int nums console.writeline nums i 字典的定義 必須包含名空間system.collection.generic dictionary裡面的每乙個元素都是乙個鍵值對 由二個元素組成 鍵和值 鍵必...

經典演算法面試題

1 說是有乙個文字檔案,大約有一萬行,每行乙個詞,要求統計出其中最頻繁出現的前十個詞。先用雜湊,統計每個詞出現的次數,然後用在n個數中找出前k大個數的方法找出出現次數最多的前10個詞。2 如題1,但是這次檔案特別大,沒有辦法一次讀入記憶體。1 直接排序,寫檔案時,同時寫入字串及其出現次數。2 可以用...

經典演算法面試題

維護乙個1000個節點的小頂堆。時間複雜度o nlogk 具體步驟 1 將k個陣列的第乙個元素取出來,維護乙個小頂堆。2 彈出堆頂元素存入結果陣列中,並把該元素所在陣列的下乙個元素取出來壓入隊中。3 調整堆的結構,使其滿足小頂堆的定義。4 重複 2 3 直到合併完成。動態規劃 dp n m 表示n被...