插入排序思想:將陣列分成兩組,第乙個陣列值為一組並認為該陣列為有序的,並從後面陣列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往後移一...