1 #include<stdio.h>
2 #include<string.h>
3 #include<time.h>
4 #include<algorithm>
5 using namespace std;
6
7 int n = 50000;
8
9 void select(int b[])
10 {
11 for (int i = 1; i <n; i++)
12 for (int j = i + 1; j <= n; j++)
13 if (b[i] > b[j]) swap(b[i], b[j]);
14 }
15
16 void bubble(int b[])
17 {
18 for (int i = 1; i < n; i ++)
19 for (int j = 1; j < n; j ++)
20 if (b[j] > b[j + 1]) swap(b[j], b[j + 1]);
21 }
22
23 void quick(int b[], int l, int r)
24 {
25 int i = l, j = r, x, y;
26 x = b[(l + r) / 2];
27 while (i <= j)
28 {
29 while (b[i] < x) i++;
30 while (x < b[j]) j--;
31 if (i <= j)
32 {
33 swap(b[i], b[j]);
34 i++; j--;
35 }
36 }
37 if (i < r) quick(b, i, r);
38 if (l < j) quick(b, l, j);
39 }
40
41 int c[1000005];
42 void merge(int b[], int l, int r, int mid)
43 {
44 for (int i = l; i <= r; i++) c[i] = b[i];
45 int x1 = l, x2 = mid + 1;
46 for (int i = l; i <= r; i++)
47 {
48 if (x1 > mid) b[i] = c[x2++];
49 else if (x2 > r) b[i] = c[x1++];
50 else if (c[x1] < c[x2]) b[i] = c[x1++];
51 else b[i] = c[x2++];
52 }
53 }
54 void mergesort(int b[], int l, int r)
55 {
56 int mid = (l + r) / 2;
57 if (l >= r) return;
58 mergesort(b, l, mid);
59 mergesort(b, mid + 1, r);
60 merge(b, l, r, mid);
61 }
62
63 void insert(int b[])
64 {
65 for (int i = 2; i <= n; i++)
66 {
67 int j = i;
68 while (j > 1 && b[j] < b[j - 1])
69 {
70 swap(b[j], b[j - 1]);
71 j--;
72 }
73 }
74 }
75
76 void heap(int b[], int i, int size)
77 {
78 int child;
79 for (; 2 * i <= size; i = child)
80 {
81 child = 2 * i;
82 if (child < size && b[child + 1] > b[child]) child++;
83 if (b[i] < b[child]) swap(b[i], b[child]);
84 else break;
85 }
86 }
87 void heapsort(int b[])
88 {
89 for (int i = n / 2; i >= 1; i--)
90 heap(b, i, n);
91 for (int i = n; i > 1; i--)
92 {
93 swap(b[i], b[1]);
94 heap(b, 1, i - 1);
95 }
96 }
97
98 int a[1000005], b[1000005];
99 int main()
100 {
101 srand(time(0));
102 for (int i = 1; i <= n; i++) a[i] = rand();
103 clock_t begin, duration;
104
105 for (int i = 1; i <= n; i++) b[i] = a[i];
106 begin = clock();
107 select(b);
108 duration = clock() - begin;
109 // for (int i = 1; i <= n; i++) printf("%d ",b[i]); printf("\n");
110 printf("select sort = %dms\n\n",duration*1000/CLOCKS_PER_SEC);
111
112 for (int i = 1; i <= n; i++) b[i] = a[i];
113 begin = clock();
114 bubble(b);
115 duration = clock() - begin;
116 // for (int i = 1; i <= n; i++) printf("%d ",b[i]); printf("\n");
117 printf("bubble sort = %dms\n\n",duration*1000/CLOCKS_PER_SEC);
118
119 for (int i = 1; i <= n; i++) b[i] = a[i];
120 begin = clock();
121 quick(b, 1, n);
122 duration = clock() - begin;
123 // for (int i = 1; i <= n; i++) printf("%d ",b[i]); printf("\n");
124 printf("quick sort = %dms\n\n",duration*1000/CLOCKS_PER_SEC);
125
126 for (int i = 1; i <= n; i++) b[i] = a[i];
127 begin = clock();
128 mergesort(b, 1, n);
129 duration = clock() - begin;
130 // for (int i = 1; i <= n; i++) printf("%d ",b[i]); printf("\n");
131 printf("merge sort = %dms\n\n",duration*1000/CLOCKS_PER_SEC);
132
133 for (int i = 1; i <= n; i++) b[i] = a[i];
134 begin = clock();
135 insert(b);
136 duration = clock() - begin;
137 // for (int i = 1; i <= n; i++) printf("%d ",b[i]); printf("\n");
138 printf("insert sort = %dms\n\n",duration*1000/CLOCKS_PER_SEC);
139
140 for (int i = 1; i <= n; i++) b[i] = a[i];
141 begin = clock();
142 heapsort(b);
143 duration = clock() - begin;
144 // for (int i = 1; i <= n; i++) printf("%d ",b[i]); printf("\n");
145 printf("heap sort = %dms\n\n",duration*1000/CLOCKS_PER_SEC);
146 }