3.2.4 - Shell Sort
1. 演算法
比較第筆資料與第span
筆資料,若前者大於後者,則兩者交換。
每一回合(每一個span
)要做到都沒有發生交換才可以結束。
span
的型式:
void Sort(char *arr){
int n = strlen(arr);
int span = n/2;
int flag = 0;
while(span >= 1){
while(flag != n-span){ //判斷是否整個回合都沒有swap
flag = n - span;
for (int i = 0; i < n-span; i++){
if (arr[i] > arr[i+span]){ //swap
int temp = arr[i];
arr[i] = arr[i+span];
arr[i+span] = temp;
flag--;
}
}
}
span/=2;
}
}
演算法分析:
,下一回合沒有發生交換,此回合結束。
,下一回合沒有發生交換,此回合結束。
,下一回合沒有發生交換,此回合結束。
span
=1,shell sort結束。
2.性質
Time Complexity:
Avg Case:
Worst Case:
Best Case: 和
span
的形式有關。
Space Complexity:
Shell sorting is a unstable sorting method.
Last updated