資料結構 直接插入排序

2021-10-01 16:45:46 字數 1175 閱讀 9469

將乙個記錄插入到已排好序的序列中,從而得到乙個新的有序序列(將序列的第乙個資料看成是乙個有序的子串行,然後從第二個記錄逐個向該有序的子串行進行有序的插入,直至整個序列有序)

可以選擇不同的方法在已經排好序資料表中尋找插入位置。根據查詢方法不同,有多種插入排序方法,下面要介紹的是直接插入排序。

設待排序的表有10個元素,其關鍵字分別為,直接插入排序的過程如下:

/* 引數a為需排序的陣列

引數n為陣列需排序的個數

*/void

insertion_sort

(int a,

int n)

a[j+1]

= temp;

//插入位置已經找到,立即插入}}

intmain

(int argc,

char

*ar**)

;int i;

insertion_sort

(a,10);

for(i =

0;i <

10;i++

)return0;

}(1)當初始序列為正序時,只需要外迴圈n-1次,每次進行一次比較,無需移動元素。此時比較次數

和移動次數達到最小值。

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

(2)當初始序列為反序時,需要外迴圈n-1次,每次排序中待插入的元素都要和[0,i-1]中的i個元素進行比較且要將這i個元素後移i次,加上tmp=arr[i]與arr[j]=temp的兩次移動,每趟移動次數為i+2,此時比較次數和移動次數達到最大值。

此時時間複雜度o(n^2)

(3)在直接插入排序中只使用了i,j,temp這三個輔助元素,與問題規模無關,空間複雜度為o(1)

(4)相同元素的相對位置不變,如果兩個元素相同,插入元素放在相同元素後面。是一種穩定排序。

資料結構 直接插入排序

直接插入排序 include include typedef struct int elem int length sqlist void initsqlist sqlist l int i printf 請輸入元素個數 scanf d l length l elem int malloc size...

資料結構 直接插入排序

直接插入排序 將待插入子串行元素逐步插入到有序序列的執行過程。設有一待排序序列s 其中是有序的,是無序的,要把後面無需的元素,乙個乙個的插入到前面有序的集合中去。如下面的序列可以分為兩個子串行 和 初始序列 75 88 68 92 88 62 77 96 80 72 第一次排序 75 88 68 9...

資料結構 直接插入排序

直接 插入排序 straight insertion sort 是一種最簡單的排序方法,其基本操作是將一條記錄插入到已排好的有序表中,從而得到乙個新的 記錄數量增1的有序表 在日常生活中,經常碰到這樣一類排序問題 把新的資料插入到已經排好的資料列中。例如 一組從小到大排好順序的資料列,通常稱之為有序...