排序演算法筆記一之插入排序

2021-09-13 22:08:42 字數 1967 閱讀 6304

思想:

首先找到陣列中最小的那個元素,其次,將它和陣列的第乙個元素交換(如果第乙個元素就是最小元素那麼它就和自己交換),再次,在剩下的元素中找到最小的元素,將它與陣列的的第二個元素交換位置,如此往復,直到將整個陣列排序。這種方法叫做選擇排序,因為它不斷地選擇剩餘元素之中的最小者。 下面是具體的**:

public void selectsort(int arr) 

}int temp = arr[min];

arr[min] = arr[i];

arr[i] = temp;

} for (int i = 0; i < arr.length; i++)

}

時間和空間效率:對於長度為n的陣列,選擇排序需要大約n^2/2次比較和n次交換

選擇排序執行和輸入是無關的。

思想

簡單插入排序演算法原理:從整個待排序列中選出乙個元素插入到已經有序的子串行中去,得到乙個有序的、元素加一的子串行,直到整個序列的待插入元素為0,則整個序列全部有序,當前索引左邊的元素都是有序的,但它們的最終位置不確定

具體**:

// 插入排序

public void insertsort(int arr)

} for (int i = 0; i < arr.length; i++)

}

對於隨機排列的長度為n且主鍵不重複的陣列,平均情況下插入排序需要n24

\frac}

4n2​

次比較,n24

\frac}

4n2​

次交換,最壞情況下需要n22

\frac}

2n2​

次比較,n22

\frac}

2n2​

次交換,最好情況下需要n-1次比較和0次交換。插入排序的時間取決於輸入中元素的初始順序。上面的這種在內迴圈裡面,每一次迴圈都交換了元素,這個實際上做了很多不必要的操作,我們可以在內迴圈中將較大的元素都向右移動,而不是每次都交換連個元素,這樣就可以提高插入排序的速度。

改進後的**如下:

public void insertsort1(int arr) 

arr[j] = temp;

} for (i = 0; i < arr.length; i++)

}

ps:總的來說,插入排序對於部分有序的陣列十分高效,也很適合小規模陣列。

對於隨機排序的無重複主鍵的陣列,插入排序和選擇排序的執行時間是平方級別的,兩者之比應該是乙個較小的常數。

希爾排序的思想是使陣列中任意間隔為h的元素都是有序的,就是說我們普通的排序,一般都是間隔為1的排序,就是我們比較的時候,總是相鄰的元素進行比較,而希爾排序是讓間隔為h的元素是有序的,比如間隔為3,那麼,0,3,6…這些索引所對應的元素是有序的,但是整體來看,這個陣列不一定是有序的。希爾排序比普通的排序更加高效的原因是,剛開始每個子陣列都很短,排序之後子陣列都是部分有序的,而插入排序在陣列已經是部分有序的情況下是非常高效的。

具體**如下:

public void shellsort(int arr) 

while (h >= 1)

arr[j] = temp;

}h = h / 3;

} for (int i = 0; i < arr.length; i++)

}

希爾排序也可以用於大型陣列。主要還是用於中等規模大小的陣列

我覺得希爾排序實際上就是可變間距的直接插入排序,在while迴圈裡面,第乙個for迴圈,我一直覺得i=h這個初始值,有問題,因為,陣列下標是從0開始的,因為上面我寫的直接插入排序的**for迴圈i是0開始的,但是仔細看那個**,當i=0的時候,裡面的那個迴圈是不執行的,而且我看網上其他人的**i是從1開始的。所以這個應該沒有什麼問題

排序演算法之插入排序

排序演算法之插入排序 1 插入排序的思想 假設在乙個有序序列中 e 0 e i 1 這i 個元素已經排好序,則當要將第 i 1個元素 e 插入該序列時,只需將第 i 1個元素與從 e 0 開始到e i 1 元素進行比較,當發現第 j個元素 e j 在序列中應在 e 前,且 e j 1 應在e 後時,...

排序演算法之插入排序

排序演算法之插入排序 1 插入排序的思想 假設在乙個有序序列中 e 0 e i 1 這i 個元素已經排好序,則當要將第 i 1個元素 e 插入該序列時,只需將第 i 1個元素與從 e 0 開始到e i 1 元素進行比較,當發現第 j個元素 e j 在序列中應在 e 前,且 e j 1 應在e 後時,...

排序演算法之插入排序

本節主要分析插入排序演算法的直接插入排序和希爾 shell 排序 又稱縮小增量排序 1.直接插入排序 該排序是最簡單的排序方法,其基本思想是 假設待排序的記錄存放在陣列r 1.n 中。初始時,r 1 自成1個有序區,無序區為r 2.n 從i 2起直至i n為止,依次將r i 插入當前的有序區r 1....