快速排序
1 #include <exception> 2 #include <time.h> 3 #include <cstdio> 4 #include <cstdlib> 5 6 int RandomInRange(int start, int end) { 7 srand((int)time(NULL)); 8 return start + rand() % (end - start + 1); 9 } 10 11 void Swap(int* x, int* y) { 12 int t; 13 t = *x; 14 *x = *y; 15 *y = t; 16 } 17 18 int Partition(int data[], int length, int start, int end) { 19 if (data == NULL || length < 0 || start < 0 || end >= length) 20 throw new std::exception("Invalid Parameters"); 21 22 int index = RandomInRange(start, end); 23 Swap(&data[index], &data[end]); 24 25 int small = start - 1; 26 for (index = start; index < end; ++index) { 27 if (data[index] < data[end]) { 28 ++small; 29 if (small != index) 30 Swap(&data[index], &data[small]); 31 } 32 } 33 34 ++small; 35 Swap(&data[small], &data[end]); 36 37 return small; 38 } 39 40 void QuickSort(int data[], int length, int start, int end) { 41 if (start == end) 42 return; 43 44 int index = Partition(data, length, start, end); 45 46 if (index > start) 47 QuickSort(data, length, start, index - 1); 48 if (index < end) 49 QuickSort(data, length, index + 1, end); 50 } 51 52 void OutputList(int data[], int length) 53 { 54 for (int i = 0; i<length-1; ++i) 55 { 56 printf("%d ", data[i]); 57 } 58 printf(" "); 59 } 60 61 int main() { 62 int data[9] = { 1,3,7,2,9,6,8,5 }; 63 64 OutputList(data, 9); 65 66 QuickSort(data, 9, 0, 7); 67 68 OutputList(data, 9); 69 70 system("pause"); 71 return 0; 72 }