面試排序整理

2021-10-23 04:41:13 字數 2916 閱讀 2010

為了防止面試再次翻車,總結一下排序,並給出**

描述:

1.首先設定乙個分界值,通過這個分界值將陣列的值分到兩邊

2.將大於或等於分界值的數,放到陣列分界值的右邊。將小於或等於分界值的數,放到陣列的左邊。

3.對於分界值左邊的資料,繼續進行分界流程,然後對於分界值右邊的資料,同樣可以繼續程序分界流程。

4.上述過程可以寫成遞迴實現,先遞迴實現左側部分排序,然後實現右側部分排序。然後整個排序過程就完成了。

**

#include

#include

#include

#include

using

namespace std;

void

quicksort

(int array,

int start,

int last)

//把這個值放到低端指標上

//這個時候array[j]的值已經移動了

//這個時候應該從找到乙個比temp大的值放到array[j]上

while

(i array[i]

) i++

;//然後從低端指標找到第乙個比二分指標大的值

if(i} array[i]

=temp;

//這樣排序保證了i位置一定是正確的

//左排序

quicksort

(array,start,i-1)

;//右排序

quicksort

(array,i+

1,last);}

}int

main()

quicksort

(a,1

,n);

for(

int i=

1;i<=n;i++

) cout<}return0;

}

氣泡排序相當於就是每次把最小的值(或者最大的值) 通過連續的和相鄰的進行比較,把大的值往右邊放,保證右邊一定是有一部分是已經排序好的。

最壞時間複雜度是o(n^2)

最優時間複雜度是o(n)

原因,我們如果發現整個序列都是有序的,沒有乙個位置需要進行大小的交換,那麼這個序列一定是已經排好序的,比如1 2 3 4 5 這類,其實只需要o(n)就排序完成了

#include

#include

#include

using

namespace std;

void

pop_sort

(int array,

int len)}if

(didswap==0)

return;}

}int

main()

pop_sort

(a,n)

;for

(int i=

1;i<=n;i++

) cout<}return0;

}

這個排序其實很簡單,首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小(大)元素,然後放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。

最差時間複雜度是o(n^2)

最好時間複雜度還是(n^2)

因為迴圈每次都要從左往右掃去找第k小的數,放在第k個位置,無法進行優化

**

#include

#include

#include

using

namespace std;

void

selectsort

(int array,

int len)}}

}int

main()

selectsort

(a,n)

;for

(int i=

1;i<=n;i++

) cout<}return0;

}

歸併排序是建立在歸併操作上的一種有效的排序演算法。該演算法是採用分治法(divide and conquer)的乙個非常典型的應用。將已有序的子串行合併得到完全有序的序列;

最壞複雜度:o(logn)

最優複雜度:o(logn)

由於本排序每次都把乙個區間分成兩端,類似於二分,在分割槽的操作是o(logn),加上遍歷到底的交換,總複雜度是o(n),複雜度是o(n*logn),並且複雜度穩定。

#include

#include

#include

#include

using

namespace std;

int temp[

100]

;void

merge

(int a,

int left,

int right)

else

cout<<

"ss"

<}while

(i<=mid)

while

(j<=right)

for(

int k=

0;k<=lenth;k++)}

void

merge_sort

(int a,

int left,

int right)

}int

main()

cout

(a,0

,n-1);

for(

int i=

0;i) cout<}return0;

}

面試基礎演算法整理 選擇排序

面試基礎演算法整理 選擇排序 1.演算法原理 n個記錄的直接選擇排序可經過n 1趟直接選擇排序得到有序結果。具體演算法描述如下 1.初始狀態 無序區為r 1 n 有序區為空 2.第i趟排序 i 1,2,3 n 1 開始時,當前有序區和無序區分別為r 1 i 1 和r i 該趟排序從當前無序區中選出關...

面試整理 一)

1.如何理解物件導向的思想?物件導向是為了解決系統的可維護性,可擴充套件性,可重用性,我們再進一步思考,物件導向為什麼能解決系統的可維護性,可擴充套件性,可重用性?物件導向產生的歷史原因有下面兩點 1 計算機是幫助人們解決問題的,然而計算機終究是個機器,他只會按照人所寫的 一步一步的執行下去,最終得...

js面試整理

1.判斷基本資料型別typeof 判斷物件的型別 object.prototype.tostring.call 使用 typeof bar object 判斷 bar 是不是乙個物件弊端?使用 typeof 的判斷object弊端是顯而易見的 這種弊端同使用 instanceof let obj l...