📌java實現幾種常用排序:選擇排序


一.選擇排序介紹

選擇排序,顧名思義就是用逐個選擇的方式來進行排序,逐個選擇出數組中的最大(或最小)的元素,直到選擇至最后一個元素。此時數組完成了排序。

二.選擇排序原理分析

三.選擇排序代碼實現

/**
 * @Author {LearnAndGet}
 * @Time 2019年1月8日
 * @Discription:選擇排序
 */
package com.sort;

import java.util.Arrays;

public class ChooseSort {

	static int[] array = {3,2,4,1,5,0};
	
	public static void chooseSort(int[] a) 
	{
		int max = 0;
		int index = 0;
		//外層循環,控制選擇的次數,數組長度為6,一共需要選擇5次
		for(int i=0;i<a.length-1;i++) 
		{
			for(int j=0;j<a.length-i;j++) 
			{
				if(max < a[j]) 
				{
					max = a[j];
					index = j;
				}
			}
			//每次選擇完成后,max中存放的是該輪選出的最大值
			//將max指向位置的元素和數組最后一個元素位置互換
			int temp = a[a.length-i-1];
			a[a.length-i-1] = max;
			a[index] = temp;
			//清空max和index,便於下次
			max=0;
			index =0;
			System.out.println("經過第"+(i+1)+"輪選擇后,數組為"+Arrays.toString(a));
		}
	}
	
	public static void main(String[] args) {
		chooseSort(array);
	}
}

四選擇排序代碼優化

因為選擇排序過程中,每一輪選擇出最大的元素並將它和數組最后一位互換位置,那么即使在某一輪的選擇過程中,未發生位置互換,此時也不能說明數組已經排序完成,假設數組: 2 1 3 4 5 進行升序排列

  1. 第一輪選擇后,數組序列為:2 1 3 4 5

  2. 第二輪選擇后,數組序列為:2 1 3 4 5

  3. 第三輪選擇后,數組序列為:2 1 3 4 5

  4. 第四輪選擇后,數組序列為:1 2 3 4 5

    可以看到,即使前三輪的選擇過程中,都沒有發生數組元素互換,但是此時數組仍未排序完成,直到第4輪選擇完成后,數組才完成了排序。因此選擇排序並不能優化。

五.選擇排序時間復雜度

計算時間復雜度時,默認計算最復雜的情況下需要進行的次數:比如將數組:5 4 2 1 3進行升序排列:

  1. 第一輪選擇排序:一共需要進行4次比較。可以將5和3互換,得到:3 4 2 1 5
  2. 第二輪選擇排序:一共需要進行3次比較。可以將4和1互換,得到:3 1 2 4 5
  3. 第三輪選擇排序:一共需要進行2次比較。可以將3和2互換,得到:2 1 3 4 5
  4. 第四輪選擇排序:一共需要進行1次比較。可以將2和1互換,得到:1 2 3 4 5

可以看到,對數組長度為5進行排序,需要進行比較的次數為4+3+2+1=10次。若數組長度為n,那么進行比較的次數為(n-1)+(n-2)+(n-3)+...1 = n * (n - 1) / 2,當n足夠大時,n * (n - 1) / 2約等於n*n。

綜上所述,選擇排序的時間復雜度為:O(n²)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM