Code-1
//第一迴圈
//用於判定當前應該在何位置進行排序
for(l=1;l < size;l++){
//第二迴圈
//用於判定該位置是否需要排序
for(j=0;j <= l;j++){
//判定是否排序
if(*(data+l) < *(data+j)){
//進行排序前置動作-暫存
tmp_sort=*(data+l);
//將除了第一迴圈所指定的數字外,將其他大於第二迴圈所指定的數字往後移
for(k=l;k > j;k=k-1){
*(data+k)=*(data+(k-1));
}
//將第二迴圈所指定的位置插入先前暫存的數字
*(data+j)=tmp_sort;
// 避免繼續第二迴圈繼續進行
break;
}
}
}
Code-2
//第一迴圈
//用於判定當前應該在何位置進行排序
for(l=1;l < size;l++){
//暫存
tmp_sort=*(data+l);
j=l;
//當暫存小於 j-1 之指標位置之值並且 j 大於等於 0 時
while((tmp_sort < *(data+(j-1)) && (j >= 0))){
//排序數字往後移
*(data+j)=*(data+(j-1));
//j 移動
j--;
}
//將 j 之指標位址複寫為暫存之數值
*(data+j)=tmp_sort;
}
Code-1 和 Code-2 最主要的差別在於 Code-1 事先不知道需排列的陣列是不是屬於 Increase 的狀態底下,而 Code-2 則是默認為皆屬 Increase 下進行,所以當編譯後執行排列所產生的時間:
Increase
Code-1 : 隨排序量增加
Code-2 : 趨近於不需要時間
但是在 Decrease 的情況底下, Code-2 所需要的時間就會比 Code-1 還要來得多。
0 件のコメント:
コメントを投稿