天天看點

JAVA排序算法(二)————簡單選擇排序

分類

選擇排序基本分成三種,簡單選擇排序,樹排序,堆排序,因為我們還沒開始講解各個資料結構,是以現在隻實作簡單選擇排序。

概念

顧名思義,選擇排序就是選擇,選擇大的或者小的。

原理是什麼呢?

我們以從小到大排序為例,就是每趟在數組中找最小的元素放在前面相應的位置(數組交換)。

我們以int arry[] = {2,1,8,6,5,9};為例。

第一趟: 周遊數組,1最小,則把1放在第一個位置。則為{1,2,8,6,5,9}
第二趟: 周遊除了第一個數以外的數組,發現2最小,是以位置不變。
第三躺: 周遊除了1,2之外的數組,發現5最小,是以數組變成了{1,2,5,6,8,9}
第四趟: 周遊除了1,2,5之外的數組,發現6最小,位置不變。

第五趟:周遊除了1,2,5,6之外的數組,發現8最小,位置不變。則數組排序最終為

{1,2,5,6,8,9}

我們分析一下上邊的邏輯,首先應該是兩個for循環,沒跑了。

如果我們把數組長度定為N,

  • 第一層for循環代表了比較的趟數,要比 N-1趟。
  • 第二層for循環在每趟循環中通過比較找出最小的數。
  • 通過數組交換,把每次找出的最小的數與本趟中的開始的數組下标進行交換。
  • 在進行上述步驟,直到循環完畢。

代碼實作

如果沒了解的朋友,建議好好揣摩我做的分析。并在腦子中進行算法試算。

package 排序算法;

import java.util.Arrays;

/**
 * Author:haozhixin
 * Func:簡單選擇排序
 * Date:20190811
 */
public class SelectSort {
	public static void selectSort(){
		int arry[] = {1,2,8,6,5,9};
		//簡單排序的原理就是每次周遊
		for(int i=0;i<arry.length-1;i++){//比較的趟數
			int tempValue = arry[i];//定義一個臨時變量,存儲目前需要替換的值,和下标
			int flag=i;//目前的數組下标
			for(int j=i+1;j<arry.length;j++){
				if(arry[j]<tempValue){
					tempValue=arry[j];//每次進來儲存的是目前最小值
					flag=j;//目前最小值的下标
				}
			}
			if(flag!=i){//做數組叫喚
				arry[flag] = arry[i];
				arry[i]=tempValue;
			}
		}
		System.out.print(Arrays.toString(arry));
	}

	public static void main(String args[]){
		selectSort();
	}
}
           

當然,也有别的實作方式,但是這種定義是選擇排序中效率比較高的寫法了。

作者:select you from me

來源:CSDN

轉載請聯系作者獲得授權并注明出處。