為了防止面試再次翻車,總結一下排序,並給出**
描述:
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...