08 選擇排序

08 選擇排序

準備工作

public class SelectionSort {
    public static void main(String[] args) {
        //selection sort是快速排序的意思
          int[] a={55,77,22,44,88,-8};
        System.out.println("需要排序的原數組a如下所示:");
        for (int i = 0; i < a.length; i++) {
            System.out.print(a[i]+"\t");
        }
        System.out.println();//換行
    }
}

A.升序

1.思路分析:

//核心是找最大值
//升序思路:

    //1.找到數組當前部分的最大值的下標,並把它賦值給max_index(每次尋找前會重置爲0)
    //2.把最大值與數組當前部分的最後一個元素交換
    //3.循環1,2步驟,直到最外層循環遍歷結束

//數組當前部分(說明)----->
//設數組 int a[]={1,-33,44,5,7,99};
//第一次,數組當前部分爲1到99這六個元素,所以max_index=5,最後一個元素的座標爲a.length-1;
//把a[max_index]與a[a.length-1]交換,最後一個元素已經確定
//第二次,數組的當前部分爲1到7這五個元素....................倒數第二個元素已經確定
//第三次,數組的當前部分爲1到5這四個元素
//注意:降序部分與升序的部分的數組的當前部分是一致的

2.核心代碼

   for (int i = 0; i < a.length-1; i++) {
            //a.length-1是因爲第一個數不用交換了,因爲後面的數已經排好序了
            int max_index=0;//使a[max_index]爲數組a的第一個元素
            for (int j = 1; j < a.length-i; j++) {
            //第一個不用比,所以默認從第二個開始比較
                if(a[j]>=a[max_index]){
                    max_index=j;
                }
            }
            int temp=a[max_index];
            a[max_index]=a[a.length-1-i];
            a[a.length-1-i]=temp;
        }
        //排序後(升序)的數組爲:
        System.out.println("排序後的數組a(升序)如下所示");
        for (int i = 0; i < a.length; i++) {
            System.out.print(a[i]+"\t");
        }

3.運行截圖

B.降序

1.思路分析:

//核心是找最小值

//降序思路:

           //1.找到數組當前部分的最小值的下標,並把它賦值給min_index(每次尋找前會重置爲0)
         //2.把最小值與數組當前部分的最後一個元素交換
       //3.循環1,2步驟,直到最外層循環遍歷結束

2.核心代碼:

    for (int i = 0; i < a.length-1; i++) {
            //a.length-1是因爲第一個數不用交換了,因爲後面的數已經排好序了
            int min_index=0;//使a[max_index]爲數組a的第一個元素
            for (int j = 1; j < a.length-i; j++) {
            //第一個不用比,所以默認從第二個開始比較
                if(a[j]<=a[min_index]){
                    min_index=j;
                }
            }
            int temp=a[min_index];
            a[min_index]=a[a.length-1-i];
            a[a.length-1-i]=temp;
        }
        //排序後(降序)的數組爲:
        System.out.println("排序後的數組a(降序)如下所示");
        for (int i = 0; i < a.length; i++) {
            System.out.print(a[i]+"\t");
        }

3.運行截圖

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章