如果遇到相等的值不進行交換,那這種排序方式是穩定的排序方式
比較兩個相鄰的元素,將值大的元素交換到右邊
public
static
void
sort1
(int
arr)}}
system.out.
println
(arr.length)
;for
(int i =
0; i < arr.length; i++
)}
從頭至尾掃瞄序列,找出最小的乙個元素,和第乙個元素交換,接著從剩下的元素中繼續這種選擇和交換方式,最終得到乙個有序序列
public
static
void
sort2
(int
arr)}}
for(
int i =
0; i < arr.length; i++
)}
public
static
void
sort3
(int
arr,
int value)
else
if(arr[mid]
mid=
(start+end)/2
;if(start>end)
} system.out.
println
("查詢次數:"
+count+
"位置:"
+mid)
;}
快速排序之所比較快,每次交換是跳躍式的每次排序的時候設定乙個基準點,將小於等於基準點的數全部放到基準點的左邊,將大於等於基準點的數全部放到基準點的右邊
public
static
void
sort4
(int
arr,
int low,
int high)
i=low;
j=high;
//基準位
temp=arr[low]
;while
(i//再左邊往右邊遞增
while
(arr[i]
<=temp&&i//滿足條件則交換
if(i}//i=j,交換基準位
arr[low]
=arr[i]
; arr[i]
=temp;
//遞迴基準位左邊的陣列
sort4
(arr,low,j-1)
;//i遞迴基準位右邊的陣列
sort4
(arr,j+
1,high)
;}
public
class
test
;int
arr1=
;sort1
(arr)
;//冒泡
system.out.
println()
;sort2
(arr)
;//選擇
system.out.
println()
;sort3
(arr1,6)
;//二分查詢
system.out.
println()
;sort4
(arr,
0,arr.length-1)
;//快速排序
for(
int i : arr)
}
堆排序的基本思想是:將待排序序列構造成乙個大頂堆,此時,整個序列的最大值就是堆頂的根節點。將其與末尾元素進行交換,此時末尾就為最大值。然後將剩餘n-1個元素重新構造成乙個堆,這樣會得到n個元素的次小值。如此反覆執行,便能得到乙個有序序列了 基本排序排序演算法
時空複雜度 氣泡排序 時間o n 2 額外空間o 1 插入排序 時間o n 2 額外空間o 1 選擇排序 時間o n 2 額外空間o 1 基數排序 時間o k n k logn max 額外空間o n 臨時儲存 o b 記數,b為基的大小 記數排序 時間o n k 額外空間o k 希爾排序 時間o ...
基本排序排序演算法
時空複雜度 氣泡排序 時間o n 2 額外空間o 1 插入排序 時間o n 2 額外空間o 1 選擇排序 時間o n 2 額外空間o 1 基數排序 時間o k n k logn max 額外空間o n 臨時儲存 o b 記數,b為基的大小 記數排序 時間o n k 額外空間o k 希爾排序 時間o ...
基本排序演算法
將要排序的物件分作兩部份,乙個是已排序的,乙個是未排序的,從後端未排序部份選擇乙個最小值,並放入前端已排序部份的最後乙個,例如 排序前 70 80 31 37 10 1 48 60 33 80 1 80 31 37 10 70 48 60 33 80 選出最小值1 1 10 31 37 80 70 ...