09 插入排序

09 插入排序

思路分析:

​ 核心思想爲:把無序數組的第一個元素當成有序數組,每次往後面(第二個元素開始)拿一個元素,把它與有序數組重新排序成有序數組,直到拿到最後一個元素爲止.

注意:升序就是假定有序數組爲升序來求解的,降序是假定有序數組是降序來求解的

int[] a={1,77,66,3,20};以a數組爲例,可以得到如下所示的表

所以往後拿元素的總次數(外層循環)爲數組長度-1次,重新排序的次數(內層循環)爲i+1次

準備工作

 //insertion sorter是插入排序的意思
        //準備工作
        int[] a={-111,77,3,4,5,99,55};
//      int[] a={1,2,3,4,5,55,99};
//      int[] a={999,33,21,17,9,4,1};
        System.out.println("需要排序的原數組a如下所示:");
        for (int i = 0; i < a.length; i++) {
            System.out.print(a[i]+"\t");
        }
        System.out.println();//換行

A.升序

1.核心代碼

 //升序(假定有序數組爲升序)
        for (int i = 0; i < a.length-1; i++) {
            for (int j = i+1; j>0; j--) {
                //j取不到0是因爲重新排序的次數爲i+1次
               if(a[j]<=a[j-1]){
                   int temp=a[j];
                   a[j]=a[j-1];
                   a[j-1]=temp;
               }else{
                   break;//比最後一個元素(有序數組)還要大,就不用判斷了,因爲無需移動
               }
            }
        }
        System.out.println("排序後的原數組a(升序排列如下所示:");
        for (int i = 0; i < a.length; i++) {
            System.out.print(a[i]+"\t");
        }

2.運行截圖

B.降序

1.核心代碼:

  // 降序(假定有序數組爲降序)
        for (int i = 0; i < a.length-1; i++) {
            for (int j = i+1; j>0; j--) {
                //j取不到0是因爲重新排序的次數爲i+1次
                if(a[j]>=a[j-1]){
                    int temp=a[j];
                    a[j]=a[j-1];
                    a[j-1]=temp;
                }else{
                    break;  //比最後一個元素還要小(有序數組),就不用判斷了,因爲無需移動
                }
            }
        }
        System.out.println("排序後的原數組a(降序)排列如下所示:");
        for (int i = 0; i < a.length; i++) {
            System.out.print(a[i]+"\t");
        }

2.運行截圖

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