排序演算法Java實現

2021-09-12 19:44:31 字數 4559 閱讀 9545

思想:

//氣泡排序

class

test1}}

return sort;

}public

static

void

main

(string[

] args)

;int

sort=

bubblesort

(unsort)

;for

(int i =

0; i < sort.length; i++)}

}

演算法複雜度分析:最好時間複雜度o(n^2),最壞時間複雜度為:o(n方),空間複雜度o(1).

class

test1

int temp=sort[end]

; sort[end]

=sort[start]

; sort[start]

=temp;

while

(startint temp2=sort[end]

; sort[end]

=sort[start]

; sort[start]

=temp2;}if

(start>low)

quicksort

(sort,low,start-1)

;if(endquicksort

(sort,end+

1,high)

;return sort;

}public

static

void

main

(string[

] args)

;int start=0;

int end=unsort.length-1;

int[

] sort=

quicksort

(unsort,start,end)

;for

(int i =

0; i < sort.length; i++)}

}

演算法複雜的分析:不穩定,在乙個序列是完全正序或完全反序的情況,變成氣泡排序,複雜度為o(n^2)。

。將乙個陣列進行對半,陣列規模變小,重複該過程,直到元素個數為1,乙個元素是排好序的。

然後就是合併的過程,開始合併兩個元素,然後四個、八個。該演算法是分治演算法的典型實現。

package duanxin;

class

new_name

return a;

}public

static

void

merge

(int

a,int low,

int mid,

int high,

int temp)

else

}// 把左邊剩餘的數移入陣列

while

(i<=mid)

// 把右邊邊剩餘的數移入陣列

while

(j<=high)

// 把新陣列中的數覆蓋nums陣列

for(

int x=

0;x1;x++)}

public

static

void

main

(string[

] args)

;int

temp =

newint

[array.length]

;int

sort=

sort

(array,

0,array.length-

1,temp)

;for

(int i =

0; i < sort.length; i++)}

}

穩定演算法,其時間複雜度固定。

演算法複雜度分析:no(log2n)。

在陣列中找到最小的元素的位置與第乙個元素交換,然後將不包括第乙個元素外的元素繼續按照上述方式比較。

package test1;

class

test1

}int temp=array[i]

; array[i]

=array[k]

; array[k]

=temp;

}return array;

}public

static

void

main

(string[

] args)

;int

sortarray=

choosesort

(array)

;for

(int i =

0; i < sortarray.length; i++)}

}

package test1;

class

test1

array[j]

=temp;

}for

(int i =

0; i < array.length; i++)}

public

static

void

main

(string[

] args)

;insertsort

(array);}

}

複雜度o(n^2).

希爾排序:在直接插入排序的基礎上進行的優化,直接插入排序在n值小的時候效率比較高,在n很大的時候如果待排序序列基本有序,效率依然很高,時間效率可以提公升為o(n)。希爾排序也稱之為縮小增量排序。

package duanxin;

class

new_name

a[j+gap]

= temp;

}for

(int i =

0; i < a.length; i++

) gap = gap/2;

}}public

static

void

main

(string[

] args)

;shellsort

(array);}

}

思想:堆排序就是利用堆(假設進行公升序,也就是使用大頂堆)進行排序的方法。它的基本思想是,將待排序的序列構造成乙個大頂堆。此時,整個序列的最大值就是堆頂的根結點。將其與堆陣列的末尾元素交換,此時末尾元素就是最大值,然後將剩餘的 n - 1 個序列重新構造成乙個堆,這樣就得到 n - 1個元素中的次大值。如此反覆執行, 便能得到乙個有序序列了 。

非比較排序引用

桶排序在海量資料中的應用

桶排序可用於最大最小值相差較大的資料情況,比如[9012,19702,39867,68957,83556,102456]。

但桶排序要求資料的分布必須均勻,否則可能導致資料都集中到乙個桶中。比如[104,150,123,132,20000], 這種資料會導致前4個數都集中到同乙個桶中。導致桶排序失效。

??(**存在問題了)(

package duanxin;

class

new_name

int[

]temp=

newint

[max]

;for

(int i =

0; i < a.length; i++

)int index=0;

for(

int i =

0; i < temp.length; i++)}

for(

int z =

0; z < a.length; z++)}

public

static

void

main

(string[

] args)

;countsort

(array);}

}

常見的快速排序、歸併排序、堆排序、氣泡排序等屬於比較排序。

在排序的最終結果裡,元素之間的次序依賴於它們之間的比較。每個數都必須和其他數進行比較,才能確定自己的位置 。在氣泡排序之類的排序中,問題規模為n,又因為需要比較n次,所以平均時間複雜度為o(n²)。在歸併排序、快速排序之類的排序中,問題規模通過分治法消減為logn次,所以時間複雜度平均o(nlogn)。

比較排序的優勢是,適用於各種規模的資料,也不在乎資料的分布,都能進行排序。可以說,比較排序適用於一切需要排序的情況。

計數排序、基數排序、桶排序則屬於非比較排序。非比較排序是通過確定每個元素之前,應該有多少個元素來排序。針對陣列arr,計算arr[i]之前有多少個元素,則唯一確定了arr[i]在排序後陣列中的位置。

非比較排序只要確定每個元素之前的已有的元素個數即可,所有一次遍歷即可解決。演算法時間複雜度o(n)。 非比較排序時間複雜度底,但由於非比較排序需要占用空間來確定唯一位置。所以對資料規模和資料分布有一定的要求。

排序演算法java實現

以下文章 亦風亦塵的空間http blog.csdn.net lschou520 archive 2008 10 29 3176422.aspx 插入排序 package org.rut.util.algorithm.support import org.rut.util.algorithm.sor...

java實現排序演算法

四種排序方式 1.氣泡排序 2.插入排序 3.快速排序 4.歸併排序 author zhaijian public class sorts bubblesort a insertsort a quicksort a mergesort a print a 氣泡排序 兩個迴圈,第乙個迴圈是指要排序的總...

排序演算法java實現

選擇排序類 交換排序類 歸併排序類 附工具類 直接插入排序public class insertionsorter a j tmp arrayutils.printarray a public static super anytype void sort anytype a,int left,int...