1、冒泡排序:
#include "date.h"
#include <stdio.h>
#include <stdlib.h>
#include <time.h> // 函数声明
void bubbleSort(int *arr, int n);
int* createRandomArray(int n, int *size); int main() { int time = getTime(); int n; printf("请输入数组的大小n: "); scanf("%d", &n); // 动态创建数组并填充随机数 int *arr = createRandomArray(n, &n); // 打印原始数组 printf("原始数组: \n"); for (int i = 0; i < n; i++) { printf("%d ", arr[i]); } printf("\n"); // 对数组进行冒泡排序 bubbleSort(arr, n); // 打印排序后的数组 printf("排序后的数组: \n"); for (int i = 0; i < n; i++) { printf("%d ", arr[i]); } printf("\n"); // 释放内存 free(arr); return 0;
} // 创建包含随机数的动态数组
int* createRandomArray(int n, int *size) { int *arr = (int *)malloc(n * sizeof(int)); if (arr == NULL) { printf("内存分配失败!\n"); exit(1); } srand(time(NULL)); // 初始化随机数种子 for (int i = 0; i < n; i++) { arr[i] = rand() % 100; // 生成0到99之间的随机数 } *size = n; // 如果外部需要知道数组大小,可以返回它 。 return arr;
} // 冒泡排序函数
void bubbleSort(int *arr, int n) { int *i, *j, temp; for (i = arr; i < arr + n - 1; i++) { for (j = i + 1; j < arr + n; j++) { if (*i > *j) { // 交换 *i 和 *j temp = *i; *i = *j; *j = temp; } } }
}
运行结果如下:
2、选择排序:
#include "date.h"
#include <stdio.h>
#include <stdlib.h>
#include <time.h> // 函数原型声明
void generateRandomArray(int **arr, int n);
void selectionSort(int *arr, int n);
void printArray(int *arr, int n); int main() { int time = getTime(); int n; printf("请输入数组的大小n: "); scanf("%d", &n); // 分配内存给数组 int *arr = (int *)malloc(n * sizeof(int)); if (arr == NULL) { printf("内存分配失败\n"); return 1; } // 生成随机数并填充数组 generateRandomArray(&arr, n); // 打印原始数组 printf("原始数组: "); printArray(arr, n); // 对数组进行排序 selectionSort(arr, n); // 打印排序后的数组 printf("排序后的数组: "); printArray(arr, n); // 释放内存 free(arr); return 0;
} // 生成随机数并填充到数组中
void generateRandomArray(int **arr, int n) { srand(time(NULL)); // 初始化随机数种子 for (int i = 0; i < n; i++) { (*arr)[i] = rand() % 100; // 生成0到99之间的随机数 }
} // 选择排序
void selectionSort(int *arr, int n) { int i, j, minIndex, temp; for (i = 0; i < n - 1; i++) { minIndex = i; for (j = i + 1; j < n; j++) { if (arr[j] < arr[minIndex]) { minIndex = j; } } // 交换找到的最小元素和第i个元素 temp = arr[minIndex]; arr[minIndex] = arr[i]; arr[i] = temp; }
} // 打印数组
void printArray(int *arr, int n) { for (int i = 0; i < n; i++) { printf("%d ", arr[i]); } printf("\n");
}
运行结果如下:
3、插入排序:
#include "date.h"
#include <stdio.h>
#include <stdlib.h>
#include <time.h> // 函数声明
void insertSort(int *arr, int n);
void printArray(int *arr, int n); int main() { int times = getTime(); int n, i; printf("请输入数字n: "); scanf("%d", &n); // 动态分配数组 int *arr = (int *)malloc(n * sizeof(int)); if (arr == NULL) { printf("内存分配失败!\n"); return 1; } // 初始化随机数生成器 srand(time(NULL)); // 生成随机数并存储到数组中 for (i = 0; i < n; i++) { arr[i] = rand() % 100; // 生成0到99之间的随机数 } // 打印原始数组 printf("原始数组: "); printArray(arr, n); // 对数组进行插入排序 insertSort(arr, n); // 打印排序后的数组 printf("排序后的数组: "); printArray(arr, n); // 释放内存 free(arr); return 0;
} // 插入排序函数
void insertSort(int *arr, int n) { int i, key, j; for (i = 1; i < n; i++) { key = arr[i]; j = i - 1; /* 将arr[i]插入到arr[0], arr[1], ..., arr[i-1]中已排序的序列中 */ while (j >= 0 && arr[j] > key) { arr[j + 1] = arr[j]; j = j - 1; } arr[j + 1] = key; }
} // 打印数组函数
void printArray(int *arr, int n) { for (int i = 0; i < n; i++) { printf("%d ", arr[i]); } printf("\n");
}
运行结果如下: