java實現選擇,插入,冒泡排序

排序問題一直是計算機編程的重要問題。
而選擇排序、插入排序、冒泡排序都是多種排序算法中比較簡單、容易實現的排序算法,這幾種排序算法的平均事件複雜都是O(n2)
這裏用數組java int[] a = {10, 35, 97, 23, 66, 27, 19};來進行講解。
實現思想一樣,但是實現代碼可能略有不同。

選擇排序
實現思想:
1,遍歷數組,選擇最小的元素放在第一個位置。
2,從第2個位置開始遍歷數組,從中將最小的元素放在第2個位置。
3,從第3個位置開始遍歷數組,從中將最小的元素放在第3個位置。
······
直到倒數第二個位置爲止,因爲最後一個位置不用排序,從前面的每次選擇中,剩下的最後一個位置一定是最大的元素。

例子

選擇排序
原順序:10  35  97  23  66  27  19
[]爲已經排好序的部分

 第一步:[10]  35  97  23  66  27  19 
 第二步:[10  19]  97  35  66  27  23 
 第三步:[10  19  23]  97  66  35  27 
 第四步:[10  19  23  27]  97  66  35 
 第五步:[10  19  23  27  35]  97  66 
 第六步:[10  19  23  27  35  66]  97 
 無需第七步,數組已經變得有序了。

java實現代碼

static void selectSort(int[] a){
		System.out.println("選擇排序");
		for (int i = 0; i < a.length - 1; i++){
			for (int j = i + 1; j < a.length; j++){
				//總是將最小的數放在當前數組最前面的位置
				if (a[i] > a[j]){
					int t = a[i];
					a[i] = a[j];
					a[j] = t;
				}
			}
		}
	}

插入排序
實現思想:
1,假設第1個元素是一個有序數組,然後將第2個元素插入到前面的數組中,
2,由於前面的那個數組是有序的,所以第2個與第1個元素進行比較,如果比第1個大的話就放在第2個位置,如果比第1個元素小的話就插入到第一個位置。
3,將第3個元素插入到含有兩個元素的前面的有序數組中合適的位置,要與第2個元素進行比較,如果大了就放在第3個位置,如果小於第2個元素,則要與第1個元素比較,從而找到合適的位置。
······

例子

選擇排序
原順序:10  35  97  23  66  27  19
[]爲已經排好序的部分

 第一步:[10  35]  97  23  66  27  19 
 第一步:[10  35  97]  23  66  27  19 
 第一步:[10  23  35  97]  66  27  19 
 第一步:[10  23  35  66  97]  27  19 
 第一步:[10  23  27  35  66  97 ] 19 
 第一步:[10  19  23  27  35  66  97]
 
 無需第七步,數組已經變得有序了。

java實現代碼

static void insertSort(int[] a){
		System.out.println("插入排序");
		for (int i = 1; i < a.length; i++){
			for (int j = i-1; j > 0; j--){
				if (a[j + 1] < a[j]){
					int t = a[j];
					a[j] = a[j + 1];
					a[j + 1] = t;
				}
			}
		}
	}

冒泡排序
實現思想:
1,遍歷數組,選擇大的元素放在最後的位置。
2,遍歷數組,選擇第2大的元素放在倒數第2的位置。
3,遍歷數組,選擇第3大的元素放在倒數第3的位置。
······

例子

冒泡排序
原順序:10  35  97  23  66  27  19
[]爲已經排好序的部分

 第一步:10  35  23  66  27  19  [97] 
 第二步:10  23  35  27  19  [66  97] 
 第三步:10  23  27  19  [35  66  97] 
 第四步:10  23  19  [27  35  66  97]   
 第五步:10  19  [23  27  35  66  97] 
 第六步:10  [19  23  27  35  66  97] 

 無需第七步,數組已經變得有序了。

java實現代碼

static void bubbleSort(int[] a){
		System.out.println("冒泡排序");
		for (int i = 0; i < a.length; i++){
			for (int j = 0; j < a.length - i - 1; j++){
				//總是將最大的數放在當前數組最後面的位置
				if (a[j+1] < a[j]){
					int t = a[j+1];
					a[j+1] = a[j];
					a[j] = t;
				}
			}
		}
	}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章