Algorithm - Sorting (Insertion Sort) 插入排序法
想法: 類似玩大老二在整理牌的時候 把所有牌分成已排序區和未排序區 初始假設第一張在已排序區 例如 在第一回合 把第二張拿來跟第一張比較 第二張如果小於第一張 => 第二張放在較小的位置 第二張如果大於第一張 => 第二張放在較大的位置 所以此時第一張和第二張的相對位置會是正確的 (第一二張位在已排序區,其他都是未排序區) 在第二回合 把第三張拿來跟已排序區的做比較 找到對的相對位置後插進去 所以此時這三張牌的相對位置會是正確的 以此類推 要注意一個地方 在插入的地方 要把插入的地方往後的地方(直到已排序區的尾巴)都往後移一格 記得 要先移動最後面的值 如果從最前面開始移動 會把值一直往後覆寫 Code: #include <stdio.h> #include <stdlib.h> #include <time.h> void swap ( int * a , int * b ); void printarray ( int size , int * data ); void generate_random_array ( int size , int * data ); void bubblesort ( int size , int * data ); void selectionsort ( int size , int * data ); void insertionsort ( int size , int * data ); void swap ( int * a , int * b ){ int tmp = * a ; * a = * b ; * b = tmp ; } void printarray ( int size , int * data ){ printf ( "data: " ); for ( int i = 0 ; i < size ; i ++ ){ printf ( " %d ," , data [ i ]); ...