八大排序之氣泡排序和快速排序

2021-10-10 23:38:51 字數 2949 閱讀 4594

快速排序

二. 以右側第乙個元素為基值

三. 以中間值為基值

將相鄰的兩個元素進行比較, 按照某種規則進行位置交換(公升序則為如果前面的元素大於後面的元素, 則進行交換; 降序則為前面的元素小於後面的元素交換)

對陣列中的每對相鄰元素進行比較並進行相應的交換, 從頭至尾

每輪完成後都可將本輪中最大的元素移動到相應的位置

比如: 第一輪的中將最大的元素移動到陣列尾部, 第二輪將除去隊尾的最大的元素移動到隊尾-1的位置

重複上1, 2, 3步

將外層迴圈的終止條件設定為 陣列長度 - 1

將記憶體迴圈條件設定為 陣列長度 - 迴圈次數, 因為每一輪都會確定乙個相應的最大元素, 則無需再對這個元素進行比較

設定flag標誌, 當一輪迴圈結束, flag沒有改變, 則證明所有元素都在正確的位置, 則無需再進行交換

public

class

bubblesorting

;bubblesort

(sortarray)

; system.out.

println

(arrays.

tostring

(sortarray));

}public

static

void

bubblesort

(int

sortarray)}if

(!flag)

break

;else

flag =

false;}

}}

快速排序基於基值, 在開始排序前需要按照某種規則選擇乙個基值(比如選擇最左側的值為基值, 或最右側的值為基值, 或這中間的值為基值)

設定兩個索引leftright, 分別指向當前比較序列的最左側和最右側

再設定兩個變數l 和 r, 分別讓l = left , r = right

先從右往做將每個元素與基值進行比較, 當前元素不滿足則r–, 直到 r找到小於等於基值的元素

再從左往右將每個元素與基值進行比較, 當前元素不是則將l++, 直到找到大於基值的元素

找到相應的元素後, 將l 和 r 指向的值進行調換

直到 l == r, 完成本輪的位置調換

因為此時 l 等於 r 則將l 指向的值 與最左側的值進行交換

如果left < l 則進行遞迴

同樣 如果right > l 則進行遞迴

public

static

void

quicksort

(int

sortarray,

int left,

int right)

if(l == r)

if(left < l)

if(right > r)

}

設定兩個索引leftright, 分別指向當前比較序列的最左側和最右側

再設定兩個變數l 和 r, 分別讓l = left , r = right

先從左往右將每個元素與基值進行比較, 當前元素不是則將l++, 直到找到大於等於基值的元素

再從右往做將每個元素與基值進行比較, 當前元素不滿足則r–, 直到 r找到小於基值的元素

找到相應的元素後, 將l 和 r 指向的值進行調換

直到 l == r, 完成本輪的位置調換

因為此時 l 等於 r 則將l 指向的值 與最右側的值進行交換

如果left < l 則進行遞迴

同樣 如果right > l 則進行遞迴

public

static

void

quicksort

(int

sortarray,

int left,

int right)

if(l == r)

if(left < l)

if(right > r)

}

設定兩個索引leftright, 分別指向當前比較序列的最左側和最右側

再設定兩個變數l 和 r, 分別讓l = left , r = right

從左往右將每個元素與基值進行比較, 當前元素不是則將l++, 直到找到大於等於基值的元素

從右往做將每個元素與基值進行比較, 當前元素不滿足則r–, 直到 r找到小於等於基值的元素

找到相應的元素後, 將l 和 r 指向的值進行調換

每輪將值交換完成後, 分別給 l++ 和 r–

直到 l > r, 完成本輪的位置調換

如果left < l 則進行遞迴

同樣 如果right > l 則進行遞迴

// 方式1: 

public

static

void

quicksort1

(int

sortarray,

int left,

int right)

if(left < r)

if(right > l)

}//方式2:

public

static

void

quicksort2

(int

sortarray,

int left,

int right)

if(l == r)

if(left < r)

if(right > l)

}

八大排序之氣泡排序

氣泡排序,穩定,平均與最壞時間複雜度為o n 2 最好為o n 空間複雜度為o 1 include using namespace std void bubblesort int numbers,const int length int main int length 0 cin length fo...

八大排序之氣泡排序

1 比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。2 對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。這步做完後,最後的元素會是最大的數。3 針對所有的元素重複以上的步驟,除了最後乙個。4 持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。1.不管原始陣列是否...

八大排序之氣泡排序

思路 冒泡,即為在每次排序時,將此時陣列內最大的數移到此時的最後一位。第一步 確定有幾個數需要放到各自情況的最後一位,答案是陣列長度 1個數。第二步 確定第i次將此時的最大數排到此時的最後一位時,需要進行比較多少次,答案是陣列長度 1 i次。因為此時已經確定了i 1個數的位置 所以用兩層迴圈即可實現...