直接插入排序
直接插入排序的思想是:
①將整個待排序的記錄序列劃分為有序區和無序區,初始時有序區為待排序記錄中的第一個記錄,無序區包括所有剩餘的其他記錄;
②將無序區的第一個記錄插入到有序區的合適位置中,從而使無序區減少一個記錄,有序區增加一個記錄;
③重複執行②,直到無序區中沒有記錄為止。
具體程式碼如下:
void InsertSort(int array[],int n )
{ int i , j ,temp;
for(i = 1;i<n;i++)//執行的趟數:n-1次
{
temp=array[i];
for(j=i-1;j>=0&&temp<array[j];j--)
array[j+1]=array[j];//注意,上面的for沒有花括號哦
array[j+1]=temp;
}
}
//更簡單點來說就是:不斷的擴充套件有序區域的範圍,比如說是[12,15] ,09,20,06
//這樣的一組數,[] 裡的數是已經排序好的,現在擴充套件有序區域的範圍,於是變成了
//[12,15,9],20,06 但是呢,有序區雖然擴充套件了,但是得將新增加進來的數進行位置調整
//首先temp=這個數,然後如果temp<原先有序區的最後一個數,也就是15,就交換他們
//變成了 [12,15,15],20,06 然後j--
//j指向了12,然後9還是小於12 然後變成了[12,12,15],20,06
//最後再j--不滿足迴圈了,退出來,此時j是等於-1的,然後j+1就是0了
//也就是剛才12的位置,再用9替換掉。
//假如不是9呢?是13呢?,那麼序列最終會變成[12,13,15],20,06
//也就是說,迴圈的操作就是相當於給從無序區增加到有序區的那個特定的數值“留空”
//假如是16呢?那麼會發現,迴圈for 根本不執行
//然後執行 temp=array[i];和array[j+1]=temp; 發現:j=i-1;然後for 不執行,j還是等於i-1。
//然後 array[j+1]=temp; 就是array[i-1+1]=temp;也就是說,自己等於自己~
//(理解的朋友可能會覺得我說得是廢話哈= = ,但還是要說一下…)
感謝每位閱讀的人!
相關文章
- 直接插入排序法排序
- 三種插入排序 直接插入排序,折半插入排序,希爾排序排序
- 【筆記】直接插入排序筆記排序
- 直接插入排序java描述排序Java
- 直接插入排序演算法排序演算法
- 排序演算法__直接插入排序排序演算法
- 排序演算法:直接插入排序排序演算法
- 排序演算法——直接插入排序排序演算法
- 排序演算法-直接插入排序排序演算法
- 【資料結構】直接插入排序資料結構排序
- 【No.16異常的直接插入排序】排序
- 【排序演算法動畫解】直接插入排序排序演算法動畫
- 【資料結構】直接插入排序_哨兵位資料結構排序
- #排序演算法#【2】直接插入排序、希爾排序排序演算法
- 演算法學習之直接插入排序(java)演算法排序Java
- 程式猿修仙之路--演算法之直接插入排序演算法排序
- 經典演算法之直接插入排序及其優化演算法排序優化
- 筆試之排序-直接插入排序、氣泡排序、快速排序筆試排序
- 04資料結構排序演算法之直接插入排序資料結構排序演算法
- 希爾排序使用直接插入排序、二分插入排序的C++程式碼實現演算法排序C++演算法
- 淺解前端必須掌握的演算法(三):直接插入排序前端演算法排序
- java氣泡排序-選擇排序-插入排序-使用API中文文件直接呼叫函式Java排序API函式
- [java]插入排序及折半插入排序Java排序
- 插入排序排序
- 插入排序排序排序
- 03 插入排序排序
- python插入排序Python排序
- 數的插入排序排序
- 插入排序(PHP,C)排序PHP
- 排序之插入排序排序
- 如何理解插入排序?排序
- 連結串列-插入排序排序
- 插入排序以及優化排序優化
- 插入排序(Insertion Sort)排序
- 插入排序-by-Python排序Python
- JavaScript實現:插入排序!!!JavaScript排序
- 【演算法】插入排序演算法排序
- 【筆記】折半插入排序筆記排序