面試常見演算法 排序查詢演算法

2021-07-03 10:07:21 字數 2238 閱讀 8279

【常見面試問題總結目錄》

演算法是程式設計師必被的乙個技能,在面試中常常出現,下面總結了面試中出現的常見演算法,這些演算法程式設計師應該牢記在心中,要非常熟練。

原理:將陣列分為無序區和有序區兩個區,然後不斷將無序區的第乙個元素按大小順序插入到有序區中去,最終將所有無序區元素都移動到有序區完成排序。

要點:設立哨兵,作為臨時儲存和判斷陣列邊界之用。

public class insertsort 

a[j] = tmp;}}

}

原理:又稱增量縮小排序。先將序列按增量劃分為元素個數相同的若干組,使用直接插入排序法進行排序,然後不斷縮小增量直至為1,最後使用直接插入排序完成排序。

要點:增量的選擇以及排序最終以1為增量進行排序結束。

public class shellsort 

a[j] = tmp;}}

}}

原理:將序列劃分為無序和有序區,不斷通過交換較大元素至無序區尾完成排序。

要點:設計交換判斷條件,提前結束以排好序的序列迴圈。

public class bubblesort }}

}private static void swap(int a, int x, int y)

}

原理:不斷尋找乙個序列的中點,然後對中點左右的序列遞迴的進行排序,直至全部序列排序完成,使用了分治的思想。

要點:遞迴、分治

public class quicksort 

private static void quicksort(int a, int left, int right)

a[lo] = a[hi];

while (lo < hi &&a[lo] <= pivot)

a[hi] = a[lo];

}a[lo] = pivot;

quicksort(a, left, lo - 1);

quicksort(a, lo + 1, right);}}

}

原理:將序列劃分為無序和有序區,尋找無序區中的最小值和無序區的首元素交換,有序區擴大乙個,迴圈最終完成全部排序

public class selectsort 

}swap(a, idx, i);}}

private static void swap(int a, int x, int y)

}

原理:利用大根堆或小根堆思想,首先建立堆,然後將堆首與堆尾交換,堆尾之後為有序區。

要點:建堆、交換、調整堆

public class heapsort 

// 調整大堆,將最大的元素調整到未排好序的部分的末尾

for (int i = a.length - 1; i > 0 ; i--)

}private static void shiftdown(int a, int i, int n)

if (tmp < a[child]) else

}a[i] = tmp;

}private static void swap(int a, int x, int y)

}

原理:將原序列劃分為有序的兩個序列,然後利用歸併演算法進行合併,合併之後即為有序序列。

要點:歸併、分治

public class mergesort 

private static void mergesort(int a, int b, int left, int right)

}private static void merge(int a, int b, int leftpos, int rightpos, intrightend) else

}while (leftpos <= leftend)

while (rightpos <= rightend)

for (int i = 0; i < numelements; i++, rightend--)

}}

public class binarysearch  else if (a[mid] < v)  else 

}return -1; // 未找到

}}

常見排序演算法和查詢演算法

時間複雜度 o n 2 穩定 let arr 3,15,9,10,1,26,2,5 for let i 0 i arr.length 1 i console.log arr 1,2,3,5,9,10,15,26 時間複雜度 o n 2 不穩定 let arr 3,15,9,10,1,26,2,5 f...

面試常見排序演算法實現

1.快速排序 快速排序 void quick sort vector nums void quick sort vector nums,int start,int end 簡易,易理解的實現 int partition vector nums,int start,int end swap nums ...

面試常見演算法

本博從工作以來經歷過不少面試,既然是軟體行業那麼面試少不了演算法,就像電影少不了高潮一樣。演算法是考察人的基本邏輯能力和探索能力,但是基礎演算法不掌握或者接觸的演算法很少,即使邏輯能力和數學能力再強的人在短短的面試時間內也解決不了很多基礎演算法問題。常見的排序演算法為插入演算法 直接插入,希爾排序 ...