1、冒泡排序:
cpp
#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、选择排序:
cpp
#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、插入排序:
cpp
#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");
}
运行结果如下: