面試排序演算法總結

2021-07-30 22:10:54 字數 1652 閱讀 1903

從第二個元素開始,每次選擇乙個元素插入到之前已經排好序的部分。

選擇插入位置的時候從後往前,將帶插入元素取出,依次後移大於帶插入元素的數。

演算法複雜度:

最好是正序有序,需要n次比較。

最差逆序有序,複雜度o(

n2)

平均複雜度o(

n2)

插入排序是穩定的

void insertsort(int a,int

size)

a[j+1] = tmp; //最後j位置數小於帶插入的數,在j+1位置插入數

}}

實際也是一組插入排序,只不過是分組插入排序。給定增量值d,將序列分為d個子序列,先插入排序子串行,最後對全部序列進行 一次插入排序。

也就是增量值必須取小於n的值,且最後乙個增量必須為1。

由於大於1的增量,排序是不穩定的。

平均複雜度:o(

nlog

n)

void shellsort(int a,int

size)

a[j+d] = tmp;

}d /= 2;

}}

對氣泡排序的一種改進,基於交換

演算法複雜度在最壞情況下為o(

n2) ,平均為o(

nlog

n)同時快排是不穩定的

void quicsort(int a,int low,int high)

a[i] = tmp;

quicksort(a,low,i-1);

quicksort(a,i+1,high);

}

排序不穩定

void selectsort(int a,int

size)

}if(k != i) swap(a[i],a[k]);

}}

在陣列中建堆

從最後乙個非葉節點進行調整

將堆頂元素與最後的元素交換,然後調整堆。

複雜度為:o(

nlog

n)

void heapadjust(int a,int i,int

size)

}void buildheap(int a,int

size)

}void heapsort(int a,int

size)

}

歸併排序是穩定排序,複雜度為o(

nlog

n),缺點是需要額外的o(

n)空間

void merge(int a, int tmp,int

left,int

mid, int

right)

else

}while (i <= mid) tmp[k++] = a[i++];

while (j <= right) tmp[k++] = a[j++];

for (int p = left; p <= right; p++)

}void m_sort(int a,int tmp,int

left,int

right)

void mergesort(int a, int size)

面試 排序演算法總結

空間複雜度 快速排序是一種原地排序,只需要乙個很小的棧作為輔助空間,空間複雜度為o log2n 所以適合在資料集比較大的時候使用。時間複雜度 時間複雜度比較複雜,最好的情況是o n 最差的情況是o n2 所以平時說的o nlogn 為其平均時間複雜度。具體操作過程 隨便取乙個值 6 將其為基準進行排...

面試排序演算法個人總結

總結了很久的排序演算法,自己測試了很多次,一直寫在筆記本上,還是怕弄丟了,還是貼到部落格上面來吧 氣泡排序 交換排序 氣泡排序 param arr public static void bubblesort long arr if exchange 0 插入排序 直接插入排序 param arr p...

面試常考 排序演算法總結

排序在各次面試的過程中問道的次數不少,氣泡排序和快速排序尤多。因此做一些總結,尤其是 部分。1.氣泡排序 1 思想 在一組數中,對當前未排好序的數,自上而下地對相鄰的兩個數依次進行比較和調整,讓較大的數往下沉,較小的數往上冒。2 複雜度 平均情況 o n 2 最壞情況 o n 2 逆序有序 最好情況...