标签:
1 //============================================================================ 2 // Name : Qsort.cpp 3 // Author : 4 // Version : 5 // Copyright : Your copyright notice 6 // Description : Hello World in C++, Ansi-style 7 //============================================================================ 8 9 #include <ctime> 10 #include <cstdlib> 11 #include <iostream> 12 using namespace std; 13 14 void Bubble(int s[], int len) 15 { 16 bool flag = true; 17 for(int i = len; i > 0 && flag; i--) 18 { 19 flag = false; 20 for(int j = 0; j < i; j++) 21 { 22 if(s[j] > s[j+1]) 23 { 24 int temp = s[j]; 25 s[j] = s[j+1]; 26 s[j+1] = temp; 27 flag = true; 28 } 29 } 30 } 31 } 32 33 void Chose(int s[], int len) 34 { 35 for(int i = 0; i < len; i++) 36 { 37 int min = i; 38 for(int j = i + 1; j < len; j++) 39 if(s[min] > s[j]) 40 min = j; 41 int temp = s[min]; 42 s[min] = s[i]; 43 s[i] = temp; 44 } 45 } 46 47 void Insert(int s[], int len) 48 { 49 for(int i = 1; i < len; i++) 50 { 51 if(s[i-1] > s[i]) 52 { 53 int j, temp = s[i]; 54 for(j = i -1; j >= 0 && s[j] > temp; j--) 55 { 56 s[j+1] = s[j]; 57 } 58 s[j+1] = temp; 59 } 60 } 61 } 62 63 void Shell(int s[], int len) 64 { 65 int step = len/2; 66 while(step >= 1) 67 { 68 for(int i = step; i < len; i ++) 69 { 70 if(s[i-step] > s[i]) 71 { 72 int j, temp = s[i]; 73 for(j = i - step; j >= 0 && s[j] > temp; j = j - step) 74 { 75 s[j+step] = s[j]; 76 } 77 s[j+step] = temp; 78 } 79 } 80 step = step/2; 81 } 82 } 83 84 void HeapAdj(int s[], int i, int len) 85 { 86 int child; 87 for(; 2*i+1 < len; i = child) 88 { 89 child = 2*i+1; 90 if(child+1 < len && s[child] < s[child+1]) 91 child++; 92 if(s[i] < s[child]) 93 { 94 int temp = s[i]; 95 s[i] = s[child]; 96 s[child] = temp; 97 } 98 } 99 } 100 101 void Heap(int s[], int len) 102 { 103 for(int i = len/2 - 1; i >= 0; i--) 104 HeapAdj(s, i, len); 105 for(int i = len - 1; i > 0; i--) 106 { 107 int temp = s[0]; 108 s[0] = s[i]; 109 s[i] = temp; 110 HeapAdj(s, 0, i); 111 } 112 } 113 114 void MergeFun(int s[],int t[], int m, int n) 115 { 116 if(m == n) 117 return; 118 int mid = (n+m)/2; 119 MergeFun(s, t, m, mid); 120 MergeFun(s, t, mid+1, n); 121 int k = m, a = m, b = mid+1; 122 while(a <= mid && b <= n) 123 { 124 while(s[a] <= s[b] && a <= mid) 125 t[k++] = s[a++]; 126 while(s[b] <= s[a] && b <= n) 127 t[k++] = s[b++]; 128 } 129 if(b == n+1) 130 { 131 while(k <= n) 132 t[k++] = s[a++]; 133 for(k = m; k <= n; k++) 134 s[k] = t[k]; 135 } 136 else 137 { 138 for(int i = m; i < k; i++) 139 s[i] = t[i]; 140 } 141 } 142 143 void Merge(int s[], int len) 144 { 145 int *t = new int[len]; 146 MergeFun(s, t, 0, len-1); 147 } 148 149 void QuitFun(int s[], int low, int high) 150 { 151 if(low >= high) 152 return; 153 154 int p = s[low]; 155 int l = low, h = high; 156 while(l < h) 157 { 158 while(s[h] >= p && l < h) 159 h--; 160 int temp = s[h]; 161 s[h] = s[l]; 162 s[l] = temp; 163 while(p >= s[l] && l < h) 164 l++; 165 temp = s[h]; 166 s[h] = s[l]; 167 s[l] = temp; 168 } 169 QuitFun(s, low, l); 170 QuitFun(s, l+1, high); 171 } 172 173 void Quit(int s[], int len) 174 { 175 QuitFun(s, 0, len-1); 176 } 177 178 clock_t start, stop; 179 180 #define LEN 30000 181 int num[LEN]; 182 int main() { 183 srand(time(NULL)); 184 for(int i = 0; i < LEN; i++) 185 { 186 //num[i] = rand()%LEN; 187 num[i] = LEN - i; 188 } 189 190 start = clock(); 191 Merge(num, LEN); 192 stop = clock(); 193 cout<<"time : "<< stop - start << endl; 194 195 for(int i = 0; i < LEN - 1; i++) 196 { 197 if(num[i] > num[i+1]) 198 cout<<"error"<<endl; 199 } 200 cout<<"done"<<endl; 201 return 0; 202 }
标签:
原文地址:http://www.cnblogs.com/yangzhouyyz/p/5114946.html