Update shell法.cpp

master
pmkfqw2gu 4 years ago
parent 438aeb7a5a
commit ab2430c996

@ -1,20 +1,41 @@
void shell(int *a,int n)
{
int i,j,k,x;
k=n/2; /*<2A><><EFBFBD>ֵ*/
while(k>=1)
{
for(i=k;i<n;i++)
{
x=a[i];
j=i-k;
while(j>=0&&x<a[j])
{
a[j+k]=a[j];
j-=k;
}
a[j+k]=x;
}
k/=2; /*<2A><>С<EFBFBD><D0A1><EFBFBD>ֵ*/
}
4
4.1
d1<nd1
d2<d1di=1
4.2
O(n^1.3)
O(1)
4.3
void ShellSort(int *arr, int size)
{
int i, j, tmp, increment;
for (increment = size/ 2; increment > 0; increment /= 2)
{
for (i = increment; i < size; i++)
{
tmp = arr[i];
for (j = i - increment; j >= 0 && tmp < arr[j]; j -= increment)
{
arr[j + increment] = arr[j];
}
arr[j + increment] = tmp;
}
}
}
int main()
{
int arr[] = { 22, 34, 3, 32, 82, 55, 89, 50, 37, 5, 64, 35, 9, 70 };
int len = (int) sizeof(arr) / sizeof(*arr);
ShellSort(arr, len);
int i;
for (i = 0; i < len; i++)
printf("%d ", arr[i]);
return 0;
}
4.4
0.02275s
Loading…
Cancel
Save