1、冒泡排序
冒泡排序(Bubble Sorting)的基本思想是:通過對待
排序序列從前向后(從下標較小的元素開始),依次比較相鄰元素的值,若發現逆序則交換,使值較大的元素逐漸從前移向后部,就象水底下的氣泡一樣逐漸向上冒。
因為排序的過程中,各元素不斷接近自己的位置,如果一趟比較下
來沒有進行過交換,就說明序列有序。
圖解冒泡排序算法的過程
原始數組:3, 9, -1, 10, 20
第一趟排序
(1) 3, 9, -1, 10, 20 // 如果相鄰的元素逆序就交換
(2) 3, -1, 9, 10, 20
(3) 3, -1, 9, 10, 20
(4) 3, -1, 9, 10, 20
第二趟排序
(1) -1, 3, 9, 10, 20 //交換
(2) -1, 3, 9, 10, 20
(3) -1, 3, 9, 10, 20
第三趟排序
(1) -1, 3, 9, 10, 20
(2) -1, 3, 9, 10, 20
第四趟排序
(1) -1, 3, 9, 10, 20
小結冒泡排序規則
(1) 一共進行 數組的大小-1 次 大的循環
(2)每一趟排序的次數在逐漸的減少
(3) 如果我們發現在某趟排序中,沒有發生一次交換, 可以提前結束冒泡排序。這個就是優化
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
import java.util.Arrays; public class BubbleSort { public static void main(String[] args) { // TODO Auto-generated method stub int arr[]= { 3 , 9 ,- 1 , 10 ,- 2 }; //第i+1趟排序,將最大的數排在最后 int temp= 0 ; //臨時變量 for ( int i= 0 ;i<arr.length- 1 ;i++) { //定義第幾輪排序 for ( int j= 0 ;j<arr.length- 1 -i;j++) { if (arr[j+ 1 ]<arr[j]) { temp=arr[j]; arr[j]=arr[j+ 1 ]; arr[j+ 1 ]=temp; } } System.out.println( "輸出第" +(i+ 1 )+ "趟排序的結果" ); System.out.println(Arrays.toString(arr)); } } } |
運行結果:
輸出第1趟排序的結果
[3, -1, 9, -2, 10]
輸出第2趟排序的結果
[-1, 3, -2, 9, 10]
輸出第3趟排序的結果
[-1, -2, 3, 9, 10]
輸出第4趟排序的結果
[-2, -1, 3, 9, 10]
2、選擇排序法
排序思路:
原始的數組 : 101, 34, 119, 1
第一輪排序 : 1, 34, 119, 101
第二輪排序 : 1, 34, 119, 101
第三輪排序 : 1, 34, 101, 119
說明:
1.選擇排序一共有 數組大小 - 1 輪排序
2.每1輪排序,又是一個循環, 循環的規則(代碼)
- 2.1先假定當前這個數是最小數
- 2.2 然后和后面的每個數進行比較,如果發現有比當前數更小的數,就重新確定最小數,并得到下標
- 2.3 當遍歷到數組的最后時,就得到本輪最小數和下標
- 2.4 交換 [代碼中再繼續說 ]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
import java.util.Arrays; public class QuickSort { public static void main(String[] args) { //int []arr={ 8,3,2,1,7,4,6,5}; int [] arr={ 101 , 34 , 109 , 1 }; quicksort(arr); } public static void quicksort( int []arr){ for ( int j= 0 ;j<arr.length- 1 ;j++) { int minindex=j; //假定當前下標為最小值下標 int minnumber=arr[j]; //假定當前元素為最小值 for ( int i = 1 +j; i < arr.length; i++) { if (arr[i] < minnumber) { //若假定最小值并不是最小的 minnumber = arr[i]; //重置minnumber minindex = i; //重置minindex } } //將最小值交換 arr[minindex] = arr[j]; arr[j] = minnumber; System.out.println( "第" +(j+ 1 )+ "輪" ); System.out.println(Arrays.toString(arr)); } } } |
總結
本篇文章就到這里了,希望可以給你帶來一些幫助,也希望您能夠多多關注服務器之家的更多內容!
原文鏈接:https://blog.csdn.net/weixin_55782195/article/details/116059075