#include <iostream> #include <stdlib.h> using namespace std; void gcd(int a, int b) { int c; c = a % b; while (c != 0) { a = b; b = c; c = a % b; } cout << b; return; } // 冒泡排序 时间复杂度太大了 O(n^2) void bubbleSort(int data[], int n) { int temp; // 暂存数组数据,交换数据 for (int i = 0; i < n - 1; i++) { // n-1 轮排序 bool flag = false; // 一轮试探无乱序,直接跳过 for (int j = n - 1; j > i; j--) { if (data[j - 1] > data[j]) { // 最多到i=1, i=0越界 temp = data[j]; data[j] = data[j - 1]; data[j - 1] = temp; flag = true; } } if (!flag) { return; } } } // 快速排序 int partition(int data[], int low, int high) { int pivot, temp; pivot = data[low]; // 最低元素作为枢轴元素 while (low < high) { while ( low < high && data[high] >= pivot) { high--; } data[low] = data[high]; while ( low < high && data[low] <= pivot) { low++; } data[high] = data[low]; } data[low] = pivot; // 枢轴元素回归到正确的地方 return low; // 返回已经排好序元素的下标 } // 参数 不定大小 数组 void quickSort(int data[], int low, int high) { // 递归 if (low < high) { // 跳出递归的条件 int pivotpos = partition(data, low, high); // 划分数组 前半段 后半段 quickSort(data, low, pivotpos - 1); // 前半段 quickSort(data, pivotpos + 1, high); // 后半段 } } int main() { int a, b, n; int* data; while (cin >> n) { data = (int*)malloc(n * sizeof(int)); for (int i = 0; i < n; i++) { cin >> data[i]; } // bubbleSort(data,n); // 时间复杂度太高 quickSort(data, 0, n - 1); // 快排 传递 int型指针 或者 int数组 cout << data[0] << " " << data[n - 1] << " "; gcd(data[n - 1], data[0]); cout << endl; free(data); } return 0; }