選擇排序—學習筆記
基本思想:
每一趟從待排序的數據元素中選出最小(或最大)的一個元素,順序放在已排好序的數列的最後,直到全部待排序的數據元素排完。
排序過程
初始關鍵字 [49 38 65 97 76 13 27 49]
第一趟排序後 13 [38 65 97 76 49 27 49]
第二趟排序後 13 27 [65 97 76 49 38 49]
第三趟排序後 13 27 38 [97 76 49 65 49]
第四趟排序後 13 27 38 49 [49 97 65 76]
第五趟排序後 13 27 38 49 49 [97 97 76]
第六趟排序後 13 27 38 49 49 76 [76 97]
第七趟排序後 13 27 38 49 49 76 76 [ 97]
最後排序結果 13 27 38 49 49 76 76 97
public class selectSort {
//循環遍歷整個數組,每輪將未排序區域的第一個元素作爲最小元素min,記錄此時的最小值的索引值minIndex,
//將這個元素與下一個元素比較,如果這個元素比最小值min還小,則將這個數的索引值賦給minIndex,繼續往
//下遍歷,直到遍歷一輪完成,則將最小索引值minIndex對應的元素與此次遍歷的第一個元素換位
////////////////////////////////////////////////////////////
/**選擇排序
* @param array 等待排序的數組
*/
public void select(Integer[] array) {
//定義一個最小索引值
int minIndex=0;
for (int i = 0; i < array.length; i++) {
//每次從當前待排序的區域的第一個元素的下一個元素j開始比較,如果這個元素比最小值小,
//則將這個元素的索引值賦給minIndex.當遍歷完成則將最小值索引對應的值與此待排數組
//的第一個元素交換位置,然後排列好的數組的序列號加1,即i的值(i代表的是待排序列的
//第一個元素的索引,同時也是排列好元素的個數)
for (int j = i+1; j < array.length; j++) {
if (array[j].compareTo(array[minIndex])<0) {
minIndex=j;
}
}
transposition(array, minIndex, i);
}
}
public void selectMax(Integer[] array) {
int MaxIndex;
/*將待排數組的最後一個元素作爲最大值,每一次從待排數組中找出最大值,
* 然後將最大值的索引賦給MaxIndex,
*
*
* */
}
//////////////////////////////////////////////////////////////
/**交換數組中的兩個數字的位置
* @param array 需要交換位置的數組
* @param i 需要交換的數組的位置1
* @param j 需要交換的數組的位置2
*/
private void transposition(Integer[] array, int i, int j) {
int temp;
temp=array[i];
array[i]=array[j];
array[j]=temp;
}
/**測試
* @param args
*/
public static void main(String[] args) {
Integer[] intgArr=new Integer[]{3,1,2,4,6,5,8,7,6,9,0};
//產生隨機數
// Integer[] intgArr = new Integer[10000];
//
// Random random = new Random();
//
//
// for (int i = 0; i < intgArr.length; i++) {
// intgArr[i]=(int)random.nextInt(100000);
// }
long startTime=System.currentTimeMillis();
selectSort insertSort = new selectSort();
insertSort.select(intgArr);
for(Integer intObj:intgArr){
System.out.print(intObj + " ");
}
long endTime=System.currentTimeMillis();
System.out.println("花費了"+(endTime-startTime)+"毫秒");
}
}