面試排序演算法

2021-10-03 16:09:40 字數 1848 閱讀 4994

private

void

swap

(int

nums,

int i,

int j)

每輪找出最小的值放在左側

private

void

selectionsort

(int

nums)

swap

(nums, i, min);}

}

假設前i有序,把i+1的元素,通過交換插入到前面的i個中

private

void

insertsort

(int

nums)

}

對於大規模的陣列,插入排序很慢,因為它只能交換相鄰的元素,每次只能將逆序數量減少 1。希爾排序的出現就是為了解決插入排序的這種侷限性,它通過交換不相鄰的元素,每次可以將逆序數量減少大於 1。

希爾排序使用插入排序對間隔 h 的序列進行排序。通過不斷減小 h,最後令 h=1,就可以使得整個陣列是有序的。

private

void

shellsort

(int

nums)

h /=3;

}}

比較交換,大的向後交換

// 慢的超時

private

void

bubblesort

(int

nums)

}

排左排右,然後歸併(將兩個有序陣列合併為乙個)

private

void

mergesort

(int

nums)

private

void

mergesort

(int

nums,

int l,

int h)

private

void

merge

(int

nums,

int l,

int m,

int h)

}

快速排序通過乙個切分元素將陣列分為兩個子陣列,左子陣列小於等於切分元素,右子陣列大於等於切分元素,將這兩個子陣列排序也就將整個陣列排序了。

parition返回的j左側都是小於nums[l]的,右側都是大於nums[l]的

private

void

quicksort

(int

nums)

private

void

quicksort

(int

nums,

int l,

int h)

private

intpartition

(int

nums,

int l,

int h)

swap

(nums, l, j)

;return j;

}

public

static

void

heapsort

(int

nums)

}private

static

void

heapify

(int

nums,

int i,

int bound)

else

if(max != i)

}

面試演算法 排序

0.演算法時間複雜度 演算法的時間複雜度和空間複雜度 總結 1.快速排序 白話經典演算法系列之六 快速排序 快速搞定 快速排序最好,最壞,平均複雜度分析 2.歸併排序 白話經典演算法系列之五 歸併排序的實現 blog.csdn.net morewindows article details 6678...

面試常用排序演算法

public class sort 因為最後結束的時候,j又被剪了一次,所以j要加1 插入 array j 1 temp 氣泡排序 public void bubblesort int array,int length 直接選擇排序 public void selectsort int array,...

面試排序演算法總結

從第二個元素開始,每次選擇乙個元素插入到之前已經排好序的部分。選擇插入位置的時候從後往前,將帶插入元素取出,依次後移大於帶插入元素的數。演算法複雜度 最好是正序有序,需要n次比較。最差逆序有序,複雜度o n2 平均複雜度o n2 插入排序是穩定的 void insertsort int a,int ...