排序 直接插入排序及其優化(java)

2021-09-19 19:15:00 字數 1209 閱讀 4457

演算法思想

直接插入排序是將整個陣列分為有序陣列和無序陣列,有序陣列是由比較過的元素組成的,而無序陣列就是還沒有進行比較的元素組成的。插入排序通過構建有序序列,對於沒有排序元素,在已排序序列中從後向前掃瞄,找到相應位置並插入 ,重複該操作,直到最後乙個元素排序完成。到此完成序列排序。 

演算法分析:

1) 從序列的第乙個元素開始,但是第乙個元素預設已經被排序 

2)取出下乙個元素,設它為待插入元素,在已經排序的元素序列中從後向前掃瞄,如果被比較元素(已排序)大於待插入元素,將該元素向後移動一位,即移到下一位置。 

3) 重複步驟2,直到找到已排序的元素小於或者等於待排序元素的位置,插入待排序元素 

4.)重複2,3步驟,直到把陣列最後乙個待排序元素插入到已排序陣列中,排序結束。

方法一:利用兩層迴圈,第一次是排序的次數,第二層是待排序元素想要插入到已排序元素中的比較次數。在第二層中如果 待排序元素小於已排序元素,他們就交換位置 。直到待排序元素大於已排序元素,該趟排序完成,進入下一趟排序。直到所有的數都排序完成,排序結束。

//方法一:

public static void insertsort1(int arr,int len) }}

}方法二:挖坑法

public static void insertsort2(int array)}}

}

方法三:折半插入

它優化了查詢待排序元素的位置,減少了比價次數

/**方法3:折半插入

* 思想:把要排序的元素,折半插入到前邊有序元素中

*/public static void insertsort3(int arr,int len)

arr[low]=temp;}}

}

時間複雜度:

小tips:

插入排序所需的時間取決於輸入元素的初始順序。例如,對乙個很大且其中的元素已經有序(或接近有序)的陣列進行排序將會比隨機順序的陣列或是逆序陣列進行排序要快得多

插入排序 直接插入排序

直接插入排序演算法思想 將整個資料表分成左右兩個子表,其中左子表為有序表,右子表為無序表 整個排序過程就是將右子表中的元素逐個插入到左子表中,直到右子表為空,而左子表成為新的有序表。演算法過程分析 將待排序的元素存放在陣列r n 1 中,在初始狀態下,r 0 為監視哨,r 1 為有序區,r 2 r ...

插入排序 直接插入排序

一.插入排序的基本思想 將乙個記錄插入已排序好的有序表中,從而得到乙個新的記錄數加1的有序表。要點 設立哨兵,作為臨時儲存和判斷陣列邊界之用。所謂的哨兵,就是即將插入的記錄。二.示例 如果碰見相等的元素,會被插到後面,所以,相等元素的前後順序沒有改變,插入排序是穩定的。三.演算法實現 public ...

插入排序 直接插入排序

直接插入排序的基本思想 將乙個記錄插入到已排序好的有序表中,然後得到乙個新記錄數增1的有序表。也就是 先將序列的第1個記錄看成是乙個有序的子串行,然後從第2個記錄逐個進行插入,直至整個序列有序為止。如果碰見乙個和插入元素相等的,那麼插入元素把想插入的元素放在相等元素的後面。所以,相等元素的前後順序沒...