annotate CbC-examples/quicksort/quicksort_c.c @ 23:775dfe898662

add quicksort version 2.
author kent <kent@cr.ie.u-ryukyu.ac.jp>
date Wed, 14 Oct 2009 12:12:51 +0900
parents 0eb6cac880f0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
22
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 #include<stdio.h>
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 #include<stdlib.h>
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 #include<unistd.h>
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 #include<assert.h>
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
5
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 static inline void
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 SWAP (int *a, int *b)
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 {
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 int tmp;
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 tmp = *a;
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 *a = *b;
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 *b = tmp;
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
13 }
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
14
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 static inline int
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 mid_point(int a, int b, int c)
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 {
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 if (a < b) {
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 if (b < c)
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 return b;
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 else if (a < c)
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 return c;
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 else
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 return a;
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 } else {
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 if (a < c)
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 return a;
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 else if (b < c)
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 return c;
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 else
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 return b;
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 }
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 }
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
34
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 void
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 selectsort(int *v, int s0, int e0)
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 {
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
38 int i,j;
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 int m;
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
40 int size = e0-s0+1;
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 v += s0;
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
42 for (i=0; i<size; i++) {
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
43 m = i;
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
44 for (j=i+1; j<size; j++) {
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
45 if (v[m] > v[j])
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
46 m = j;
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
47 }
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
48 if (m!=i)
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
49 SWAP(&v[i],&v[m]);
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
50 }
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
51 return;
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
52 }
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
53
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
54 void
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
55 quicksort(int *v, int s0, int e0)
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
56 {
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
57 int p;
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
58 int s=s0, e=e0;
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
59 #if 0
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
60 if (e<=s) return;
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
61 if (e-s<5) {
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
62 selectsort(v,s0,e0);
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
63 return;
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
64 }
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
65 #else
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
66 if (e<=s) return;
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
67 #endif
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
68
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
69 //p = (v[s]+v[(s+e)/2]+v[e])/3;
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
70 p = mid_point(v[s],v[e],v[(s+e)/2]);
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
71
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
72 while (1) {
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
73 while (v[s]<p) s++;
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
74 while (p<v[e]) e--;
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
75
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
76 if (!(s<e)) break;
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
77 SWAP(&v[s], &v[e]);
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
78 s++; e--;
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
79 }
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
80 assert(e+1==s || s==e);
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
81
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
82 quicksort(v, s0, e);
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
83 quicksort(v, e+1, e0);
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
84 return;
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
85 }
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
86
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
87 static void
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
88 print_array(int *v, int size)
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
89 {
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
90 int i;
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
91 printf("[");
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
92 for (i=0; i<size; i++) {
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
93 printf("%s%4d", (i%10==0)? "\n ":" ", v[i]);
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
94 }
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
95 printf("]\n");
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
96 }
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
97
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
98 static int
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
99 check_sort(int *v, int size)
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
100 {
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
101 int i;
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
102 for (i=0; i<size-1; i++) {
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
103 if (v[i] > v[i+1])
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
104 return 0;
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
105 }
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
106 return 1;
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
107 }
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
108
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
109 void
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
110 random_initialize(int *v, int size, int min, int max)
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
111 {
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
112 int i;
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
113 int diff = max-min+1;
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
114
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
115 for (i=0; i<size; i++) {
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
116 v[i] = min+random()%diff;
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
117 }
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
118 return;
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
119 }
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
120
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
121 int
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
122 start_sort(int size)
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
123 {
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
124 int *target;
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
125
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
126 target = (int*)malloc(sizeof(int)*size);
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
127 if (!target) {
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
128 perror("malloc");
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
129 exit(1);
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
130 }
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
131
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
132 random_initialize(target, size, 0, 1);
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
133
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
134 //print_array(target, size);
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
135 quicksort(target, 0, size-1);
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
136 //selectsort(target, 0, size-1);
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
137 //print_array(target, size);
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
138 return check_sort(target, size);
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
139 }
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
140
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
141 int
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
142 main(int argc, char **argv)
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
143 {
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
144 //unsigned int seed= -1074072728;
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
145 unsigned int seed;
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
146 int size=101;
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
147 int loop=1;
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
148 int opt, i;
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
149
23
775dfe898662 add quicksort version 2.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
150 while ((opt = getopt(argc, argv, "t:s:n:")) != -1) {
22
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
151 switch (opt) {
23
775dfe898662 add quicksort version 2.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
152 case 'n':
22
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
153 size = atoi(optarg);
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
154 break;
23
775dfe898662 add quicksort version 2.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
155 case 't':
22
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
156 loop = atoi(optarg);
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
157 break;
23
775dfe898662 add quicksort version 2.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
158 case 's':
22
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
159 seed = atoi(optarg);
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
160 break;
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
161 default:
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
162 fprintf(stderr, "Usage: %s [-t times] [-n sizeofarray] [-s seed]\n", argv[0]);
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
163 exit(1);
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
164 }
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
165 }
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
166
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
167 printf("start seed = %u\n", seed);
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
168 printf("sort size = %d\n", size);
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
169 for (i=0; i<loop; i++) {
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
170 srandom(seed+i);
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
171 int b = start_sort(size);
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
172 if (b) {
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
173 printf("seed = %d+%u, success\n", i, seed);
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
174 } else {
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
175 fprintf(stderr, "sorting failure! seed=%u+%d\n", seed,i);
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
176 exit(1);
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
177 }
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
178 }
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
179 exit(0);
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
180 }
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
181
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
182
0eb6cac880f0 add cbc example of quicksort.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
183