#include // #include #include #include int LENGTH; //数组长度 bool RANDOM = false; //是否随机生成数组 int MODE = 0; //MODE_1: 迭代 //MODE_2: 递归 #define OUTPUT //是否输出 int *a; void swap(int *a, int *b) { int c = *a; *a = *b; *b = c; } void bobblesort1A(int a[], int n) { bool sorted = false; A: sorted = true; for (int i = 1; i < n; i++) { if (a[i - 1] > a[i]) { swap(&a[i - 1], &a[i]); sorted = false; } } n--; if (sorted == false) goto A; } void bobblesort1B(int a[], int n) { bool sorted = false; sorted = true; for (int i = 1; i < n; i++) { if (a[i - 1] > a[i]) { swap(&a[i - 1], &a[i]); sorted = false; } } n--; if (n == 1) return; bobblesort1B(a, n); } void (*bobblesort1C)(int a[], int n); void init() { srand(time(NULL)); a = new int[LENGTH]; for (int i = 0; i < LENGTH; i++) if (RANDOM == true) a[i] = 1 + rand() % LENGTH; else a[i] = LENGTH - i; if (MODE == 1) bobblesort1C = bobblesort1A; else if (MODE == 2) bobblesort1C = bobblesort1B; } int main() { Begin: printf("输入数组长度:"); scanf("%d", &LENGTH); printf("选择模式:1.迭代 2.递归"); scanf("%d", &MODE); if ((MODE <= 0) || (MODE >= 3)) { printf("错误输入\n"); goto Begin; } init(); clock_t start_t, end_t; double total_t; #ifdef OUTPUT printf("Before\n"); for (int i = 0; i < LENGTH; i++) printf("%d \n", a[i]); #endif start_t = clock(); bobblesort1C(a, LENGTH); end_t = clock(); #ifdef OUTPUT printf("After\n"); for (int i = 0; i < LENGTH; i++) printf("%d \n", a[i]); #endif printf("运算时间: %.4f 秒\n", ((double)(end_t - start_t) / CLOCKS_PER_SEC)); system("pause"); goto Begin; }