排序算法---(2)選擇排序---Java實現

寫在前面:

    在這篇博客中,將會總結選擇排序算法的Java實現,分析選擇排序算法的時間複雜度,空間複雜度等。選擇排序算法的排序思想是,首先第一輪找到數組中最小的數字,並與數組索引爲0的元素交換,第二輪從索引爲1的位置開始尋找,同樣是找到數組中剩餘元素最小的元素,然後再與索引爲1的元素交換,依次類推。。。。。核心思想即:每一輪找到數組中最小的元素,插在前面,最後完成排序。

例如:數組int [] arr = new int [] {2,5,3,1,6,8,4,7}

  1. 第一次排序:找到數組中最小的元素1,交換到數組索引爲0的位置-----1,5,3,2,6,8,4,7
  2. 第二次排序:找到數組中最小的元素2,交換到數組索引爲1的位置-----1,2,3,5,6,8,4,7
  3. 第三次排序:找到數組中最小的元素3,交換到數組索引爲2的位置-----1,2,3,5,6,8,4,7
  4. 第四次排序:找到數組中最小的元素4,交換到數組索引爲3的位置-----1,2,3,4,6,8,5,7
  5. 第五次排序:找到數組中最小的元素5,交換到數組索引爲4的位置-----1,2,3,4,5,8,6,7
  6. 第六次排序:找到數組中最小的元素6,交換到數組索引爲5的位置-----1,2,3,4,5,6,8,7
  7. 第七次排序:找到數組中最小的元素4,交換到數組索引爲3的位置-----1,2,3,4,6,6,7,8

    這樣通過尋找剩餘數組元素的最小值,並交換位置,就完成了選擇排序。

代碼實現:

package test1;

/**
 * 選擇排序
 * 
 * @ClassName Test1
 * @Description
 * @author McGRADY
 * @date 2018年3月8日
 */
public class Test1 {

	public static void main(String[] args) {
		int[] arr = new int[] { 2, 5, 3, 1, 6, 8, 4, 7 };
		sort(arr);
		for (int i : arr) {
			System.out.print(i);
		}
	}

	public static void sort(int[] arr) {
		int min;
		int temp;
		for (int i = 0; i < arr.length - 1; i++) {
			min = i;
			for (int j = i + 1; j < arr.length; j++) {
				if (arr[min] > arr[j]) {
					min = j;
				}
			}
			if (min != i) {
				// 完成一次尋找最小數後,開始交換位置
				temp = arr[i];
				arr[i] = arr[min];
				arr[min] = temp;
			}
		}
	}

}

時間複雜度分析:

    通過上面的實例分析,我們可以看出,無論數組的順序如何,選擇算法的比較次數都要執行(n-1)+(n-2)+......+1次,也就是=n*(n-1)/2次,即與數組的順序無關。

    而數組的交換次數則與數組的初始順序有關。當數組正序的時候,數字交換次數爲0.而當數組反序的時候,交換次數爲n/2,最壞情況下,將會交換n-1次。

    那麼,最好情況下:程序會執行0+n*(n-1)/2次,時間複雜度爲O(n^2).

    那麼,最壞情況下:程序會執行n-1+n*(n-1)/2次,時間複雜度爲O(n^2).

總結:無論是最好情況還是最壞情況,時間複雜度都是O(n^2).

空間複雜度分析:

    由於程序中採用兩個臨時變量交換,所以空間複雜度爲一個常數,O(1).




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章