僅記錄學習筆記,如有錯誤歡迎指正。
記錄一下常用的陣列的各種排序 複雜度o(n2)
public static
void
bubblesort
(int
array)
int length = array.length;
// 外層迴圈控制比較輪數i
for(
int i =
0; i < length; i++)}
}
複雜度o(n2)public static
void
selectionsort
(int
array)
int length = array.length;
for(
int i =
0;i1;i++)}
// 交換元素位置
if(i != minindex)}}
//交換位置的方法
private static
void
swap
(int
array,
int a,
int b)
複雜度o(n2)public static
void
insertionsort
(int
array)
int length = array.length;
int flagnum;
//這是每次需要插入的數
for(
int i =
1;i1;i++
) array[j+1]
=flagnum;
}}
複雜度o(nlog2n)public static
void
shellsort
(int
array)
int length = array.length;
// temp為臨時變數,gap增量預設是長度的一半,每次變為之前的一半,直到最終陣列有序
int temp, gap = length /2;
while
(gap >0)
// 將當前數放到空出來的位置
array[preindex + gap]
= temp;
} gap /=2
;}}
分治法 t(n) = o(nlogn)public static
void
mergesort
(int
array)
sort
(array,
0, array.length -1)
;}private static
void
sort
(int
array,
int left,
int right)
int mid = left +
((right - left)
>>1)
;// 對左側子串行進行遞迴排序
sort
(array, left, mid)
;// 對右側子串行進行遞迴排序
sort
(array, mid +
1, right)
;// 合併
merge
(array, left, mid, right);}
private static
void
merge
(int
array,
int left,
int mid,
int right)
// 上面的迴圈退出後,把剩餘的元素依次填入到temp中
// 以下兩個while只有乙個會執行
while
(p1 <= mid)
while
(p2 <= right)
// 把最終的排序的結果複製給原陣列
for(i =
0; i < temp.length; i++
)}
o(nlogn) 多來看看!~public static
void
quicksort
(int
array)
//過載方便呼叫
private static
void
quicksort
(int
array,
int left,
int right)
int mid =
partition
(array,left,right)
;quicksort
(array, left, mid)
;//第一次結束後對左邊進行排序
quicksort
(array, mid +
1, right)
;//第一次結束後對右邊邊進行排序
} private static
intpartition
(int
array,
int left,
int right)
//找到後直接賦值
if(left < right)
while
(array[left]
<= temp && left < right)
if(left < right)
} array[left]
= temp;
//基準數的值賦值回來
return left;
}
大根堆 根節點的值大於左節點的值小於右節點的值public static
void
heapsort
(int
array)
int length = array.length;
//1.構建大頂堆
for(
int i = length /2-
1; i >=
0; i--
)//2.調整堆結構+交換堆頂元素與末尾元素
for(
int j = length -
1; j >
0; j--)}
private static
void
adjustheap
(int
array,
int i,
int length)
//如果子節點大於父節點,將子節點值賦給父節點(不用進行交換)
if(array[k]
> temp)
else
}//將temp值放到最終的位置
array[i]
= temp;
}
還有一些不太常用的就沒記錄了,想看的可以去下面位址。 排序1 5 各種排序演算法的總結和比較
嚴重宣告 此貼 http www.cnblogs.com flyingbread archive 2007 02 02 636993.html,請註明出處。1 快速排序 quicksort 快速排序是乙個就地排序,分而治之,大規模遞迴的演算法。從本質上來說,它是歸併排序的就地版本。快速排序可以由下面...
排序1 5 各種排序演算法的總結和比較
1 快速排序 quicksort 快速排序是乙個就地排序,分而治之,大規模遞迴的演算法。從本質上來說,它是歸併排序的就地版本。快速排序可以由下面四步組成。1 如果不多於1個資料,直接返回。2 一般選擇序列最左邊的值作為支點資料。3 將序列分成2部分,一部分都大於支點資料,另外一部分都小於支點資料。4...
js實現各種常用排序演算法
氣泡排序 var bubblesort function arr if flag 2.選擇排序var selectsort function arr if i min console.log i 1 arr function swap arr,index1,index2 3.插入排序var inse...