Shell sort
1 #include <stdio.h>
2
3 void shellsort(int * arr, int arrNum);
4
5 int main(void)
6 {
7 int arr[10] = {31, 7, 3, 2, 18, 73, 19, 1, 8, 10};
8
9 shellsort(arr, 10);
10
11 return 0;
12 }
13
14 void shellsort(int * arr, int arrNum)
15 {
16 int i, j, gap = arrNum;
17 int temp;
18
19 while(gap > 1)
20 {
21 gap = gap / 2;
22
23 for(i = gap; i < arrNum; i++)
24 {
25 temp = arr[i];
26 j = i - gap;
27
28 while((temp<arr[j]) && (j>=0))
29 {
30 arr[j + gap] = arr[j];
31 j = j - gap;
32 }
33 arr[j + gap] = temp;
34 }
35 }
36
37 for(i = 0; i < arrNum; i++)
38 {
39 printf("%d ", arr[i]);
40 }
41 }
-----
16 int i, j, gap = arrNum;
17 int temp;
18
19 while(gap > 1)
20 {
21 gap = gap / 2;
이 부분을
16 int i, j, gap = 1;
17 int temp;
18
19 while(gap < arrNum) gap = 3 * gap + 1;
20 while(gap > 1)
21 {
22 gap = gap / 3;
찾아보니 이런 식으로도 표현한다.
하지만 이 부분이 완전히 이해가 가지 않는다.
2
3 void shellsort(int * arr, int arrNum);
4
5 int main(void)
6 {
7 int arr[10] = {31, 7, 3, 2, 18, 73, 19, 1, 8, 10};
8
9 shellsort(arr, 10);
10
11 return 0;
12 }
13
14 void shellsort(int * arr, int arrNum)
15 {
16 int i, j, gap = arrNum;
17 int temp;
18
19 while(gap > 1)
20 {
21 gap = gap / 2;
22
23 for(i = gap; i < arrNum; i++)
24 {
25 temp = arr[i];
26 j = i - gap;
27
28 while((temp<arr[j]) && (j>=0))
29 {
30 arr[j + gap] = arr[j];
31 j = j - gap;
32 }
33 arr[j + gap] = temp;
34 }
35 }
36
37 for(i = 0; i < arrNum; i++)
38 {
39 printf("%d ", arr[i]);
40 }
41 }
-----
16 int i, j, gap = arrNum;
17 int temp;
18
19 while(gap > 1)
20 {
21 gap = gap / 2;
이 부분을
16 int i, j, gap = 1;
17 int temp;
18
19 while(gap < arrNum) gap = 3 * gap + 1;
20 while(gap > 1)
21 {
22 gap = gap / 3;
찾아보니 이런 식으로도 표현한다.
하지만 이 부분이 완전히 이해가 가지 않는다.
Comments
Post a Comment