分類
選擇排序基本分成三種,簡單選擇排序,樹排序,堆排序,因為我們還沒開始講解各個資料結構,是以現在隻實作簡單選擇排序。
概念
顧名思義,選擇排序就是選擇,選擇大的或者小的。
原理是什麼呢?
我們以從小到大排序為例,就是每趟在數組中找最小的元素放在前面相應的位置(數組交換)。
我們以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
轉載請聯系作者獲得授權并注明出處。