直接插入排序

2021-08-11 03:10:44 字數 1417 閱讀 8020

基本思想:

直接插入排序(insertion sort)的基本思想是:每次將乙個待排序的記錄,按其關鍵字大小插入到前面已經排好序的子串行中的適當位置,直到全部記錄插入完成為止。

設陣列為a[0…n-1]。

1、初始時,a[0]自成1個有序區,無序區為a[1..n-1]。令i=1

2、將a[i]併入當前的有序區a[0…i-1]中形成a[0…i]的有序區間。

3、i++並重複第二步直到i==n-1。排序完成。

演算法分析:

1.當元素的初始序列為正序時,僅外迴圈要進行n-1趟排序且每一趟只進行一次比較,沒有進入if語句不存在元素之間的交換(移動)。 此時比較次數(cmin)和移動次數(mmin)達到最小值。

cmin= n-1  mmin= 0;

此時時間複雜度為o(n)。

2.當元素的初始序列為反序時,每趟排序中待插入的元素都要和[0,i-1]

中的i個元素進行比較且要將這i個元素後移(arr[j+1]= arr[j]),i個元素後移移動次數當然也就為i了,再加上temp = arr[i]與arr[j+1] = temp的兩次移動,每趟移動的次數為i+2,此時比較

次數(cmin)和移動次數(mmin)達到最小值。

cmax = 1+2+...+(n-1) = n*(n-1)/2 = o(n2)

mmax = (1+2)+(2+2)+...+(n-1+2) = (n-1)*(n+4)/2 = o(n2)  (i取值範圍1~n-1)

此時時間複雜度為o(n2)。

3.在直接插入排序中只使用了i,j,temp

這3個輔助元素,與問題規模無關,所以空間複雜度為o(1). 4.

在整個排序結束後,即使有相同元素它們的相對位置也沒有發生變化,

如:5,3,2,3排序過程如下

a--3,5,2,3

b--2,3,5,3

c--2,3,3,5

排序結束後兩個元素3的相對位置沒有發生改變,所以直接插入排序是一種穩定排序。

**實現:

方法1:

void insertsort(int narray, int nlen) 

narray[j + 1] = temp;

} }}

方法2:

void swap(int *a,int *b)

void insertsort(int narray,int nlen)

}}

直接插入排序

直接插入排序是一種最簡單的排序方法,它的基本思想是依次將每個記錄插入到乙個有序中去。就是說,第i i 1 遍整理時,a1,a2,ai 1已經是排好序的子串行 取出第i個元素ai,在已排好序的子串行為ai找到乙個合適的位置,並將它插到該位置上。易知上述排序當i 1時實際上為空操作,故可直接從i 2開始...

直接插入排序

直接插入排序的演算法思想 直接插入排序 straight insertion sort 的基本操作是將乙個記錄插入到已經排好序的有序表中,從而得到乙個新的 記錄數增 1 的有序表。根據該思想,編寫 如下 從已有序列的第0個記錄開始比較 public static void insertsort1 i...

直接插入排序

源文章url http student.zjzk.cn course ware data structure web paixu paixu8.2.1.1.htm 做過部分修改。1 基本思想 假設待排序的記錄存放在陣列r 1.n 中。初始時,r 1 自成1個有序區,無序區為r 2.n 從i 2起直至...