選擇排序

直接選擇排序:

基本思想:每一趟從待排序的數據元素中選出最小(或最大)的一個元素,順序放在已排好序的數列的後面(前面),直到全部待排序的數據元素排完。 選擇排序是不穩定的排序方法。

實現思想:

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;

                   }

         }

点赞