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

运行结果如下:

相关推荐
广州灵眸科技有限公司23 分钟前
xfce桌面旋转说明:基于灵眸科技EASY-EAI-Nano-TB
网络·网络协议·tcp/ip·算法·php
得物技术30 分钟前
从"机械应答"到"服务伙伴":得物高可控智能客服的 Agent 工程实践|AICon 演讲整理
算法·llm·agent
想要成为糕糕手34 分钟前
NO.48 旋转图像 —— LeetCode 热题 100 面试导向深度解析
javascript·算法·面试
aramae40 分钟前
C++11:现代C++的里程碑
c语言·开发语言·c++·windows·git·后端
JieE2121 小时前
LeetCode 138 随机链表的复制|两种解法详解(哈希表 + 原地 O (1) 空间)
javascript·算法·面试
专注于ai算法的踩坑小达人1 小时前
时序预测主流模型综述
算法·lstm
无相求码1 小时前
为什么你的第二个 scanf 还没输入就直接跳过了?C语言输入缓冲区陷阱
c语言·后端
HZZD_HZZD2 小时前
碳核查场景下能源计量数据精准采集与碳排放核算算法全链路实战:从智能电表协议适配到排放因子动态计算
算法·能源
文祐2 小时前
C语言利用数组计算矩阵乘法
c语言·开发语言·矩阵
饼干哥哥2 小时前
10.5% 深层转化、90%+ 新用户,ChatGPT Ads 值得吗?
算法·正则表达式·编程语言