算法篇-插入排序

一、首先說一下插入排序的整體思路
通過構建有序序列,對於未排序數據,在已排序序列中從後向前掃描,找到相應位置並插入。
數組分爲兩部分:有序部分和無序部分。取出無序部分的第一個元素,與有序區部分進行比較,並插入到合適的位置。
二、詳細圖解
通過下圖來了解一下整個排序過程吧,現在排序一個亂序數組,如下
在這裏插入圖片描述

1、首選取出第一個元素 10,認爲10已經是有序的了,進行下一步
2、取出元素7,與10進行比較,比10小,交換10和7的位置,進行下一步

在這裏插入圖片描述
3、取出元素6,與10進行比較,比10小,交換位置,然後和7進行比較,比7小交換位置,進行下一步
在這裏插入圖片描述
4、取出元素8,與10比較,比10小,交換位置,與7比較,比7大,不動,進行下一步
在這裏插入圖片描述
………………………………………………………….

一直順序重複操作,完成排序
在這裏插入圖片描述
三、代碼實現

public void sort(int[] arr)
    {
        int length = arr.length;
        for(int i=0;i<length-1;i++)
        {
            if(arr[i]>arr[i+1])
            {
                for(int j=i;j>=0&&arr[j]>arr[j+1];j--)
                {
                   int tmp = arr[j];
                   arr[j]=arr[j+1];
                   arr[j+1] = tmp;
                }
            }
        }
    }

四、時間和空間複雜度

1、時間複雜度

最好情況

是有序數組,比較次數是n-1,不需要移動

最壞情況

需要進行n-1次排序,比較次數(n+2)(n-1)/2

移動次數(n+4)(n-1)/2

平均比較次數 (n+2)(n-1)/4,移動次數(n+6)(n-1)/6

所以時間複雜度是O(n2)

2、空間複雜度

整個過程只有一個tmp變量,所以空間複雜度是O(1)

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