基本演算法之一 直接插入排序

2021-07-13 18:57:12 字數 1167 閱讀 2619

package com.wang.demo;

/**

* 插入排序

* 基本思想:每步將乙個待排序的記錄,從後到前為這個元素找到乙個合適的位置

* @author xiaoezi

* */

public class insertsort ;

system.out.println("paixu");

int mm = sortarray(arr);

for(int u:mm)

}public static int sortarray(int arr)else

}//知道找到合適的位置插入待排序元素

arr[j+1] = temp;

}return arr;

}} 分析一下:

比如:38 49 63 31 5

當i=1 的時候temp=49,此時可以把temp當做乙個指標一樣,那麼此時j=0;也就是說此時38和49比較,顯然,38<49 ,所以不需要交換那麼這一亂排序之後是:38 49 63 31 32.

當i=2 的時候,temp向後移動了乙個,temp = 63,此時j=i-1=1,這裡j可以取1和0,也就是說j所指向的元素就是temp前乙個元素。這裡j=1的時候:49<63不交換,結束本次迴圈,其實這裡之前的資料都是拍好的,

當i=3的時候,temp向後移動乙個temp = 31,此時j=i-1,j=2,此時:63>31,則交換。變成:38 49 63 63 32 ,繼續執行,j=1,49>31,則交換,變成:38 49 49 63 32 ,繼續執行38>31,則交換。變成:38 38 49 63 5,此時迴圈結束,找到最佳位置就是arr[0],因此把temp值賦給它,就是:31 38 49 63 32

當i=4的時候,temp=32,此時j=i-1,j=3,63>32,則交換,變成:31 38 49 63 63 ,繼續執行,49>32,則交換,變成:31 38 49 49 63。繼續執行,38>32,則交換,變成:31 38 38 49 63.繼續執行,31<32,結束本次迴圈,此時執行完後j=0,將值賦給arr[j+1]變成:31 32 38 49 63

而且這個排序是穩定的,因為對於相等的兩個數,是不進行交換的,因此能夠保證,相等的兩個數排序之後能保證與排序前的位置一致。

而且,這裡的最好的情況複雜度就是順序o(n),最壞的就是逆序o(n*n)

排序演算法之一 直接插入排序

直接插入排序中加入了附加記錄,又稱監視哨或者哨兵。哨兵的主要作用 進人查詢 插入位置 迴圈之前,它儲存了r i 的副本,使不致於因記錄後移而丟失r i 的內容 它的主要作用是 在查詢迴圈中監視下標變數j是否越界。一旦越界 即j 0 因為r 0 可以和自己比較,迴圈判定條件不成立使得查詢迴圈結束,從而...

排序 一 直接插入排序

1 直接插入排序 1 定義 直接插入排序 straight insertion sort 是一種最簡單的排序方法。它的基本操作是將乙個記錄插入到乙個長度為m 假設 的有序表中,使之仍保持有序,從而得到乙個新的長度為m 1 的有序表。2 演算法思路 設有一組關鍵字 k 1 k 2 k n 排序開始就認...

排序一 直接插入排序

基本思想 當插入第i i 1 個物件時,前面的i 1 項 元素已經排序完成,這時 用 第 i 項 和 前面的 i 1 項進行比較,然後把插入的位置後面的元素後移一位 再 插入該位置。實現一趟排序的步驟 找位置 移位 插入資料 實現 void insertsort int arr size t siz...