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

运行结果如下:

相关推荐
zero_one_Machel7 分钟前
leetcode73矩阵置零
算法·leetcode·矩阵
青椒大仙KI1138 分钟前
24/9/19 算法笔记 kaggle BankChurn数据分类
笔记·算法·分类
^^为欢几何^^42 分钟前
lodash中_.difference如何过滤数组
javascript·数据结构·算法
豆浩宇42 分钟前
Halcon OCR检测 免训练版
c++·人工智能·opencv·算法·计算机视觉·ocr
浅念同学1 小时前
算法.图论-并查集上
java·算法·图论
何不遗憾呢1 小时前
每日刷题(算法)
算法
立志成为coding大牛的菜鸟.1 小时前
力扣1143-最长公共子序列(Java详细题解)
java·算法·leetcode
鱼跃鹰飞1 小时前
Leetcode面试经典150题-130.被围绕的区域
java·算法·leetcode·面试·职场和发展·深度优先
liangbm31 小时前
数学建模笔记——动态规划
笔记·python·算法·数学建模·动态规划·背包问题·优化问题
潮汐退涨月冷风霜1 小时前
机器学习之非监督学习(四)K-means 聚类算法
学习·算法·机器学习