插入排序的中心思想就是將乙個元素插入到已經排好序的陣列當中。
陣列a[n]
初始時,a[0]自成一格有序區,無序區為a[1…n-1] 令i = 1
將a[i]併入當前有序區a[0…i-1]中形成有序區間
i++並重複第二步直到 i == n -1
#include #include #include "myfunctions.h"
/* 陣列a[n]
1.初始時,a[0]自成一格有序區,無序區為a[1....n-1] 令i = 1
將a[i]併入當前有序區a[0...i-1]中形成有序區間
i++並重複第二步直到 i == n -1
*/void insert_sort(int a,int n)
else
*/if( a[j] < a[i] )
}//判斷j的位置是否是原來的位置,不是的話要將資料後移至j之後
if( j != i - 1 )
a[k + 1] = temp;
} //a[j] = temp; 上面 j == i的情況下a[j]會被賦值成上次的temp
// j == i 就不用換 }}
//優化上面的插入排序
void insert_sort2(int a,int n)
a[j + 1] = temp;
} }}//優化insert_sort2,不用前乙個資料覆蓋後乙個資料的方法,而是使用2個資料交換的方式
void insert_sort3(int a,int n)
// else
// //}
//優秀寫法 與上面的邏輯一模一樣
for( int j = i - 1 ; j >= 0 && a[j + 1] < a[j] ; --j)
} }}
int main()
; insert_sort3(a,10);
pjdprint(a,10);
system("pause");
return 0;
}
這裡偷了個小小的懶,我將swap函式和print函式放到了自己寫的函式檔案中,這樣就不用每次都寫一遍,嘿嘿。
我以前不是很了解,一直以為插入排序要開闢乙個與原陣列一樣大的空間,向其中插入資料。
這裡非常感謝morewindows的系列部落格白話經典演算法白話經典演算法
排序演算法 2 插入排序
插入排序 insertion sort 的基本思想是 每次將乙個待排序的記錄,按其關鍵字大小插入到前面已經排好序的子檔案中的適當位置,直到全部記錄插入完成為止。本節介紹兩種插入排序方法 直接插入排序和希爾排序。直接插入排序 直接插入排序基本思想 1 基本思想 假設待排序的記錄存放在陣列r 1.n 中...
排序演算法 2 插入排序
思路是 每次從未排好的序列中選出第乙個元素插入到已排好的序列中。步驟可以大致歸納如下 1.從未排好的序列中拿出首元素,並把它賦值給temp變數 2.從排好的序列中,依次與temp進行比較,如果元素比temp大,則將元素後移 實際上放置temp的元素位置已經空出 3.直到找到乙個元素比temp小,將t...
排序演算法2 插入排序
插入排序是通過不斷插入待排序的元素完成整個排序過程。插入排序是一種很簡單的排序方式,基本思想就是將乙個元素插入到已經排序好的序列中,從而形成乙個新的有序序列。它重複地選擇未排序的元素,將其插入已經排序好的序列中,直到沒有待排序元素時,整個排序過程完成。插入排序的工作方式就像大家打撲克牌時抓牌一樣。開...