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 ...