流程:每次都進行相鄰元素的對比,如果前乙個數字大於後乙個數字,則進行交換,之後對每一對元素都進行相同的操作,經過一輪掃瞄之後最大的元素就被放置在最後乙個元素。然後再從頭進行同樣的流程,只是接下來掃瞄的截止位置減少了1個。
**實現:
public
static
void
bubblesort
(int
arr)}}
}
流程:第一次從待排序的數字中選擇最小的元素,與陣列的起始位置進行交換,然後再從接下來的待排序數字中繼續尋找最小的元素,與已排序陣列的後乙個序列進行交換,依此類推。因為每次都將最小的元素插入到已排序陣列的後面,所以最後一定能把陣列排好序。
public
static
void
selectionsort
(int
arr)
int temp = arr[minindex]
; arr[minindex]
= arr[i]
; arr[i]
= temp;
}}
選擇排序是o(n ^ 2)的排序演算法中唯一乙個不穩定的排序,所以通常是最差的選擇。
流程:插入排序每次都將乙個數字插入到乙個已經排序好的陣列裡面,然後繼續遍歷陣列,找到每個數字在前面排好序的陣列中正確的位置。
public
static
void
insertionsort
(int
arr)
}}
注意插入排序的時間複雜度會受到資料狀況的影響,因為每次插入資料的時候,前面的陣列已經排好序了,如果這個數字比前面的所有數字都大,那麼就不需要進行插入操作了。如1 2 3 4 5進行插入排序,時間複雜度只有o(1);如果是5 4 3 2 1的話,每一輪都要進行插入操作,時間複雜度是o(n)。
流程:將乙個陣列不斷二分,然後把二分的兩部分陣列合併為乙個有序陣列,這個有序陣列可以跟另一對有序陣列進行合併,最終就可以使整個陣列變成有序陣列了。
public
class
mergesort
mergesort
(arr,
0, arr.length -1)
;}public
static
void
mergesort
(int
arr,
int left,
int right)
int mid = left +
((right - left)
>>1)
;mergesort
(arr, left, mid)
;mergesort
(arr, mid +
1, right)
;merge
(arr, left, mid, right);}
public
static
void
merge
(int
arr,
int left,
int mid,
int right)
while
(p1 <= mid)
while
(p2 <= right)
for(i =
0; i < help.length; i++)}
}
思路:將陣列先建立成乙個大根堆,然後每次都將堆頂交換到堆尾,然後將堆的大小減去1,再將新的堆繼續調整為大根堆,重複以上過程。
public
class
heapsort
int size = arr.length;
swap
(arr,0,
--size)
;while
(size >0)
}public
static
void
heapinsert
(int
arr,
int i)
}public
static
void
heapify
(int
arr,
int i,
int size)
swap
(arr, i, largest)
; i = largest;
left = i *2+
1;}}
public
static
void
swap
(int
arr,
int i,
int j)
}
思路:快速排序是基於分割槽的過程的,將乙個數字作為分割槽的基準,經過一輪分割槽,會把小於該數的數字放到數字的左邊,大於該數的數字放在數字的右邊。然後基準數字就找到自己的位置,再對基準數字的左邊和右邊進行以上的遞迴操作,這樣每一輪分割槽之後,基準數字都會找到自己的位置,到最後就能把陣列進行排序了。
基於非遞增排序說明,插入排序是每次都跟前面相鄰的數字進行對比,如果小於的話則進行交換,否則進行下一輪插入查詢。而選擇排序則是每次都找尋未排序陣列中的最小數字去進行交換。
排序的總結
總結下排序的經驗 排序演算法有n多,想全部掌握不太實際,先分類別吧,穩定排序和不穩定排序,穩定排序包含了 bubble sort 氣泡排序 insertion sort 插入排序 merge sort 歸併排序 bucket sort 桶排序 radix sort 基數排序 binary tree ...
排序 各種排序的總結
1 氣泡排序 快速排序 可能很多人會奇怪為何會把這兩種排序方式放在一起,那是因為,氣泡排序恰好是快速排序的最壞情況,相應地快速排序則是氣泡排序的優化。氣泡排序的思想 每次比較相鄰的元素,共比較 n 1 輪。排序過程中,左邊是待排序序列,右邊是已排序序列。屬於穩定排序演算法。快速排序的思想 兩個關鍵指...
關於排序的總結
在資料結構中講了一些基本的排序方法,在此做乙個總結。1 插入排序 這種排序是每一趟都在找某個帶插入元素的位置,找到之後插入到待插入的點。1 直接插入排序 這種方法是從陣列的第乙個元素依次到最後乙個元素,當當前為第i個元素時,和前面的元素逐個相比較,以找到其在前面i 1個元素當總的位置然後插入。演算法...