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

运行结果如下:

相关推荐
pianmian14 小时前
python数据结构基础(7)
数据结构·算法
闲晨4 小时前
C++ 继承:代码传承的魔法棒,开启奇幻编程之旅
java·c语言·开发语言·c++·经验分享
好奇龙猫6 小时前
【学习AI-相关路程-mnist手写数字分类-win-硬件:windows-自我学习AI-实验步骤-全连接神经网络(BPnetwork)-操作流程(3) 】
人工智能·算法
sp_fyf_20246 小时前
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-11-01
人工智能·深度学习·神经网络·算法·机器学习·语言模型·数据挖掘
香菜大丸7 小时前
链表的归并排序
数据结构·算法·链表
jrrz08287 小时前
LeetCode 热题100(七)【链表】(1)
数据结构·c++·算法·leetcode·链表
oliveira-time7 小时前
golang学习2
算法
南宫生8 小时前
贪心算法习题其四【力扣】【算法学习day.21】
学习·算法·leetcode·链表·贪心算法
懒惰才能让科技进步9 小时前
从零学习大模型(十二)-----基于梯度的重要性剪枝(Gradient-based Pruning)
人工智能·深度学习·学习·算法·chatgpt·transformer·剪枝
DARLING Zero two♡9 小时前
关于我、重生到500年前凭借C语言改变世界科技vlog.16——万字详解指针概念及技巧
c语言·开发语言·科技