C 插入排序

2021-10-01 07:45:20 字數 1064 閱讀 7930

插入排序思想:將陣列分成兩組,第乙個陣列值為一組並認為該陣列為有序的,並從後面陣列n-1個數中逐個選擇與已經有序的陣列進行比較,插入到已經排序好的陣列中,直至陣列中的所有陣列有序排列為止。這樣的話,n個元素需要進行n-1趟排序!!!

陣列a=,length=10;

i=1,j=0,a[j+1]=1i=1,j=-1,不做任何操作。

i=2,j=1,a[j+1]=4>a[j] =2,不做任何操作,陣列不改變。

i=3,j=2,a[j+1]=5>a[j] =4,不做任何操作,陣列不改變。

i=4,j=3,a[j+1]=3i=4,j=2,a[j+1]=3i=4,j=1,a[j+1]=3>a[j] =2,不做任何操作,陣列不改變。

i=5,j=4,a[j+1]=8>a[j] =5,不做任何操作,陣列不改變。

i=6,j=5,a[j+1]=7i=6,j=4,a[j+1]=7>a[j] =5,不做任何操作,陣列不改變。

i=7,j=6,a[j+1]=9>a[j] =8,不做任何操作,陣列不改變。

i=8,j=7,a[j+1]=0j--,直到陣列 a=。

i=9,j=8,a[j+1]=6j--,直到陣列 a=。

(一)普通插入排序

每次取乙個,按次在前面已排好序的區間中 依次比較找到第乙個大於當前待排資料的位置,然後移動原有資料,插入新的資料。

void insertsort(int a,int n)

int j = i - 1;

while (j >= right + 1) //移動元素

a[j + 1] = t; //插入元素到有序區

}}

直接插入排序對於最壞情況(嚴格遞減的陣列),需要比較和移位的次數為n(n-1)/2;對於最好的情況(嚴格遞增的陣列),需要比較的次數是n-1,需要移位的次數是0。當然,對於最好和最壞的研究其實沒有太大的意義,因為實際情況下,一般不會出現如此極端的情況。然而,直接插入排序對於基本有序的陣列,會體現出良好的效能,這一特性,也給了它進一步優化的可能性。(希爾排序)。直接插入排序的時間複雜度是o(n^2),空間複雜度是o(1),同時也是穩定排序。

插入排序C

變數 i 1.代表待插入數字的下標 preindex.代表前乙個元素的下標 length.代表陣列的長度 排序過程 arr 0 跳過,從arr 1 開始,每乙個數都和它前面的數字比較。while iarr i 那麼前大後小,亂序 arr preindex 1 current i include us...

c 插入排序

從整個待排序列中選出乙個元素插入到已經有序的子串行中去,得到乙個有序的 元素加一的子串行,直到整個序列的待插入元素為0,則整個序列全部有序。在實際的演算法中,我們經常選擇序列的第乙個元素作為有序序列 因為乙個元素肯定是有序的 我們逐漸將後面的元素插入到前面的有序序列中,直到整個序列有序。簡單插入排序...

C 插入排序

c 插入排序 開發工具與關鍵技術 c visualstudio插入排序和氣泡排序有一點相似,但是它們是完全不同的兩種排序方式,插入排序的方式是這樣的,例如有乙個三個元素的陣列排序順序是1,0,3我們是公升序排序方式,元素1我們不管它,元素0我們就拿出來和元素1比較這時元素0比元素1小,元素1往後移一...