Java排序(氣泡排序 快速排序)

2021-09-10 03:59:30 字數 2473 閱讀 4061

一、氣泡排序:

冒泡演算法原理:冒泡演算法就是依次比較陣列中相鄰的兩個元素,如果左邊比右邊大則進行調換,以此類推,這樣第一次排序就把最大的元素放在最底下。

舉例說明:要排序陣列:int arr = ;

第1輪排序前陣列為:[7, 2, 6, 5, 9, 4]

第1輪第1次比較:7大於2交換位置:[2, 7, 6, 5, 9, 4]

第1輪第2次比較:7大於6交換位置:[2, 6, 7, 5, 9, 4]

第1輪第3次比較:7大於5交換位置:[2, 6, 5, 7, 9, 4]

第1輪第4次比較:7小於9不交換位置:[2, 6, 5, 7, 9, 4]

第1輪第5次比較:9大於4交換位置:[2, 6, 5, 7, 4, 9]

第1輪排序後陣列為:[2, 6, 5, 7, 4, 9]

第2輪排序前陣列為:[2, 6, 5, 7, 4, 9]

第2輪第1次比較:2小於6不交換位置:[2, 6, 5, 7, 4, 9]

第2輪第2次比較:6大於5交換位置:[2, 5, 6, 7, 4, 9]

第2輪第3次比較:6小於7不交換位置:[2, 5, 6, 7, 4, 9]

第2輪第4次比較:7大於4交換位置:[2, 5, 6, 4, 7, 9]

第2輪排序後陣列為:[2, 5, 6, 4, 7, 9]

第3輪排序前陣列為:[2, 5, 6, 4, 7, 9]

第3輪第1次比較:2小於5不交換位置:[2, 5, 6, 4, 7, 9]

第3輪第2次比較:5小於6不交換位置:[2, 5, 6, 4, 7, 9]

第3輪第3次比較:6大於4交換位置:[2, 5, 4, 6, 7, 9]

第3輪排序後陣列為:[2, 5, 4, 6, 7, 9]

第4輪排序前陣列為:[2, 5, 4, 6, 7, 9]

第4輪第1次比較:2小於5不交換位置:[2, 5, 4, 6, 7, 9]

第4輪第2次比較:5大於4交換位置:[2, 4, 5, 6, 7, 9]

第4輪排序後陣列為:[2, 4, 5, 6, 7, 9]

第5輪排序前陣列為:[2, 4, 5, 6, 7, 9]

第5輪第1次比較:2小於4不交換位置:[2, 4, 5, 6, 7, 9]

第5輪排序後陣列為:[2, 4, 5, 6, 7, 9]

已排序後的陣列為:[2, 4, 5, 6, 7, 9]

由此可見:n個數字要排序完成,總共進行n-1輪排序,每i輪的排序次數為(n-i)次,所以可以用雙重迴圈語句,外層控制迴圈多少趟,內層控制每一趟的迴圈次數,即

for(int i=0;ifor(int j=0;j//交換位置

氣泡排序的優點:每進行一趟排序,就會少比較一次,因為每進行一趟排序都會找出乙個較大值。如上例:第一輪比較之後,排在最後的乙個數一定是最大的乙個數,第二輪排序的時候,只需要比較除了最後乙個數以外的其他的數,同樣也能找出乙個最大的數排在參與第二輪比較的數後面,第三輪比較的時候,只需要比較除了最後兩個數以外的其他的數,以此類推……也就是說,每進行一輪比較,每一輪少比較一次,一定程度上減少了演算法的量。

因此氣泡排序總的時間複雜度為o(n*n)

**例子:

二、快速排序

快速排序的原理:選擇乙個關鍵值作為基準值。比基準值小的都在左邊序列(一般是無序的),比基準值大的都在右邊(一般是無序的)。一般選擇序列的第乙個元素。

一次迴圈:從後往前比較,用基準值和最後乙個值比較,如果比基準值小的交換位置,如果沒有繼續比較下乙個,直到找到第乙個比基準值小的值才交換。找到這個值之後,又從前往後開始比較,如果有比基準值大的,交換位置,如果沒有繼續比較下乙個,直到找到第乙個比基準值大的值才交換。直到從前往後的比較索引》從後往前比較的索引,結束第一次迴圈,此時,對於基準值來說,左右兩邊就是有序的了。

接著分別比較左右兩邊的序列,重複上述的迴圈。

public class fastsort;

int start = 0;

int end = a.length-1;

sort(a,start,end);

for(int i = 0; istart)

//從前往後比較

while(end>start&&a[start]<=key)//如果沒有比關鍵值大的,比較下乙個,直到有比關鍵值大的交換位置

start++;

if(a[start]>=key)

//此時第一次迴圈比較結束,關鍵值的位置已經確定了。左邊的值都比關鍵值小,右邊的值都比關鍵值大,但是兩邊的順序還有可能是不一樣的,進行下面的遞迴呼叫

}//遞迴

if(start>low) sort(a,low,start-1);//左邊序列。第乙個索引位置到關鍵值索引-1

java氣泡排序與快速排序

1.氣泡排序 public class bubblesort return count public int sort2 int array return count public static void main string args system.out.println bs.sort1 ar...

排序 氣泡排序 快速排序

快速排序 氣泡排序就是自上向下依次對比兩個數字,若上面的數字大於下面的數字,則兩者交換,否則不交換。這樣每次迴圈結束,未排序的最大的數就到了最下面。如陣列前兩次迴圈過程如下 快速排序的核心是partition 函式,其功能如下所示 34的位置找到後,其將陣列分成兩部分,前一部分都比34小,後一部分都...

排序 氣泡排序 快速排序

1 基本思想 將第乙個記錄的關鍵字與第二個記錄的關鍵字比較,若為逆序,則將兩個記錄交換,再向後比較。關鍵字小的漂浮,關鍵字大的下沉。2 穩定性 演算法穩定。3 時間複雜度 o n 空間複雜度 o 1 4 實現 include define n 5 陣列長度上限 intmain printf 氣泡排序...