直接選擇排序:
基本思想:每一趟從待排序的數據元素中選出最小(或最大)的一個元素,順序放在已排好序的數列的後面(前面),直到全部待排序的數據元素排完。 選擇排序是不穩定的排序方法。
實現思想:
1、 針對n個數R[1…n]進行n-1趟選擇就可排好序。
2、 無序序列R[1…n],有序列爲空。
3、 第一趟選擇,選出最小的數p[k],用p[k]和R[1]進行交換,得到無序序列R[2…n],有序列R[1].
4、 第二趟選擇,從R[2…n]選出最小的數p[k],用p[k]和R[2]進行交換,得到無序序列R[3…n],有序列R[1…2].
重複上面過程,知道n-1趟。就排好序了。
例子:
初始關鍵字 [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 [76 97 65 49 ]
第五趟排序後 13 27 38 49 49 [97 65 76]
第六趟排序後 13 27 38 49 49 65 [97 76]
第七趟排序後 13 27 38 49 49 65 76 [97]
最後排序結果 13 27 38 49 49 65 76 97
代碼實現:
private void selectSort(int[] p) {
int tmp=0;
int tmpIndex=0;
for(int i=1;i<p.length;i++){
for(int j=i;j<p.length;j++){
if(p[tmpIndex]<p[j]){
tmpIndex=j;
}
}
tmp=p[tmpIndex];
p[tmpIndex]=p[i];
p[i]=tmp;
}
}