C语言基础(二十八)

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");  
}

运行结果如下:

相关推荐
谭欣辰4 分钟前
C++ 哈希表详解
c++·算法·哈希算法·散列表
shehuiyuelaiyuehao9 分钟前
算法11,滑动窗口,最大连续1的个数|||
算法·leetcode·职场和发展
南宫萧幕10 分钟前
车辆能量管理进阶:从前沿算法 (VMD-PPO-DBO) 机制解析到 MPC 工程建模
人工智能·算法·matlab·simulink·控制
三品吉他手会点灯16 分钟前
STM32 VSCode 开发-C语言程序运行后,终端中文乱码
c语言·ide·笔记·vscode·stm32·学习·编辑器
费曼学习法17 分钟前
快速选择算法:如何在 10 亿数据中瞬间找到“第 K 大”?
javascript·算法
彷徨而立19 分钟前
【C/C++】在头文件中定义全局变量的方法
c语言·开发语言·c++
|_⊙29 分钟前
C++ 哈希
算法·哈希算法·散列表
我不是懒洋洋34 分钟前
手写一个跳表:从原理到Redis级实现
c语言
睡觉就不困鸭37 分钟前
第十九天 删除字符串中的所有相邻重复项 栈的经典应用。
算法
小O的算法实验室42 分钟前
2026年AST,复杂边界环境下多无人机协同搜索攻击+分形智能自组织任务规划,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进