插入排序有,直接插入排序、折半插入排序、2-路插入排序和表排序。如果了解了這些排序的思路,那麼**也就容易理解了。
直接插入排序思路是:把第乙個當做已排好序的,直接從第二個開始記為當前資料(當前資料需要儲存到a[0],把a[0]當做乙個哨子)。然後用當前資料跟前面的資料比下去,大於當前資料的數都往後移一位。當找到小於當前資料的數時,把當前資料放進去。如果當前資料就是最大的則不動,直接進入下一次迴圈。
折半插入排序跟直接插入排序差不多,只是在找比當前資料小的數的時候用了二分查詢法找到屬於當前資料的位置,low就是應該插入的位置,但是這只是減少了比較次數,移動次數並沒有改變。
2-路插入排序:用乙個迴圈陣列(0-1的時候要再加上陣列長度就從0移動到n-1了)第乙個放在迴圈陣列的第乙個位置(下標為0),first和final都指向第乙個,然後從第二個開始。
如果當前資料大於final,則final++然後把當前資料放在final裡面。
如果當前資料小於first,則(first-1+length)%length然後把當前資料放在first裡面.。
如果當前資料小於final大於first則需要移動當前資料前面所有大於當前資料的數。
表排序就不寫了。
三個插入排序的**
// an highlighted block
#include
#include
#define length
8//直接插入排序
void
insertsort
(int a)
a[j +1]
= a[0]
;}}//折半插入排序
void
insertsort2
(int a)
//while
for(j=i-
1;j>=low;
--j)
a[low]
=a[0];
//high+1==low;}}
void
p2_insertsort
(int a)
else
if(a[i]
>=d[final]
)else
d[(j+1)%
length
]=a[i];}
}for
(i=1
;i<=
length
;i++)}
int main()
;// int a[5]=;
// p2_insertsort(a);
// insertsort2(a);
for(i=
1;i<
9;i++
)printf
("\n");
return0;
}
資料結構之插入排序 折半插入排序
排序思路 通過折半查詢的方式找到合適的插入位置再插入。演算法實現 public class biinsertsort else 插入點在 mid 1,right left mid 1 直到找到合適的位置 left或right 1 接下來就將left right 1後的元素後移 for int j i...
資料結構之 插入排序
包括 直接插入排序,二分插入排序 又稱折半插入排序 鍊錶插入排序,希爾排序 又稱縮小增量排序 假定這個陣列的序是排好的,然後從頭往後,如果有數比當前外層元素的值大,則將這個數的位置往後挪,直到當前外層元素的值大於或等於它前面的位置為止.這具演算法在排完前k個數之後,可以保證a 1 k 是區域性有序的...
資料結構之 插入排序
一組有序的陣列,我們向裡邊新增乙個新的資料後,如何保持資料有序呢?首先,這是乙個動態排序過程,動態向有序集合中新增資料,通過不斷的插入資料保持資料的有序性,於是就有了插入排序。我們將陣列中的資料分為兩個區間,已排序區間和未排序區間。初始已排序區間只有乙個元素,就是陣列的第乙個元素。插入演算法的核心思...