思想:
//氣泡排序
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...