排序的總結

2021-09-25 23:11:16 字數 2641 閱讀 9783

流程:每次都進行相鄰元素的對比,如果前乙個數字大於後乙個數字,則進行交換,之後對每一對元素都進行相同的操作,經過一輪掃瞄之後最大的元素就被放置在最後乙個元素。然後再從頭進行同樣的流程,只是接下來掃瞄的截止位置減少了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個元素當總的位置然後插入。演算法...