資料結構 排序演算法 分析(Java篇)

2021-08-08 09:14:58 字數 1266 閱讀 8592

上學期學了資料結構這門課,感覺上的太水了,自己再來重溫一遍.

一、插入排序

public static void insertsort(int a) }

時間複雜度o(n2);因為內迴圈中元素的比較次數對於p的每個值最多是p+1次。

二、希爾排序

public static void shellsort(int a) 

}

時間複雜度o(n2);

三、堆排序

private static int leftchild(int i)		

private static void down(integer a,int i,int n)

}

時間複雜度為o(n logn);主要時間耗費在構建堆、調整堆上面了,構建堆消耗o(n)的時間,調整堆花了2[log i]的時間,;堆排序是很穩定的

演算法。(穩定指的是假定在待排序的記錄序列中,存在多個具有相同的關鍵字的記錄,若經過排序,這些記錄的相對次序保持不變,即在原序列中,ri=rj,且ri在rj之前,而在排序後的序列中,ri仍在rj之前,則稱這種排序演算法是穩定的;否則稱為不穩定的。

四、歸併排序

private static void mergesort(integer a,integer temparray,int left,int right)

if (i

快排對pivot的選取比較關鍵,在一串隨機生成的數字中,樞紐可以選在開頭,也可選在末尾;但,是如果是一串剛好已經排為相反方向的的陣列進行快排時,這就很尷尬了,

快排的時間複雜度為o(nlogn);

六、桶排序與基數排序

public static void radixsorta(string arr,int stringlen)

}}

上面這個例子是關於字串的基數排序的實現,用乙個arraylist做桶。時間複雜度

o(nl),這裡桶的設定是假設所有字元都是ascii碼,位於unicode字符集的前256位。

若有不正確之處,望大家指證。

演算法與資料結構 排序篇

演算法 平均複雜度 最壞情況 原地排序 額外空間 是否穩定 選擇排序 o n 2n n2 o n2n n2 是 o 1 是氣泡排序 o n 2n n2 o n2n n2 是 o 1 是插入排序 o n 2n n2 o n2n n2 是 o 1 是歸併排序 o n lo gn nlogn nlogn ...

Java資料結構與演算法 排序

直接插入排序是資料越有序越快,最快時間複雜度可達到o n 選擇排序無論何時都是o n 2 快速排序越有序越慢,它要從後到前遍歷找比基準小的,時間複雜度達到o n 堆排序需要不斷進行調整,時間複雜度為o nlog2 n 定理 通過交換相鄰元素進行排序的任何演算法平均都需要 n n 時間。作為交換相鄰元...

Java資料結構和演算法 排序

馬上要找工作了,所以的把原來的重要的課程再回顧一下,我重要複習的是資料結構,在網上下了 1 i 交換陣列中的兩個數 param one param two public void swap int one,int two static long arr new long 20 隨機初始化乙個長度為2...