当前位置: 首页 > news >正文

C语言实现选择排序

#include <stdio.h>
#include <stdlib.h>
#include<time.h>

// 定义元素类型为整型
typedef int ElemType;

// 定义静态表结构体
typedef struct{
    ElemType *elem;        // 动态分配的数组指针
    int TableLen;          // 表长度
} SSTable;

// 初始化静态表
void STInit(SSTable &ST, int len) {
    ST.TableLen = len;     // 设置表长度
    ST.elem = (ElemType *)malloc(sizeof(ElemType)*ST.TableLen); // 分配内存
    int i;
    srand(time(NULL));      // 使用当前时间作为随机数种子
    for(i = 0; i < ST.TableLen; i++){ // 循环初始化数组元素
        ST.elem[i] = rand()%100;      // 随机填充元素(0-99)
    }
}

// 打印静态表内容
void STPrint(SSTable ST){
    for(int i = 0; i < ST.TableLen; i++){
        printf("%3d",ST.elem[i]); // 打印元素,右对齐,总宽度为3个字符
    }
    printf("\n");                 // 换行
}

// 定义选择排序函数,参数为一个整型数组指针和数组的长度
void SelectSort(ElemType *A, int n) {
    int i, j, tem; // 声明用于迭代的索引变量i、j以及临时交换变量tem
    
    // 遍历数组中的每一个元素作为基准点
    for (i = 0; i < n-1; i++) {
        // 从i+1开始遍历剩余未排序的部分,寻找最小值的位置
        for (j = i + 1; j < n; j++) {
            // 如果当前基准点的值大于后续元素中的任何一个,则记录下来
            if (A[i] > A[j]) {
                // 交换当前基准点与找到的更小值的位置
                tem = A[i]; // 使用临时变量存储基准点的值
                A[i] = A[j]; // 将找到的较小值放到基准点位置
                A[j] = tem; // 将原来基准点的值放到较小值原来的位置
            }
        }
    }
}

int main(){
    SSTable ST;
    STInit(ST,10);              // 初始化静态表,设置长度为10
    STPrint(ST);                // 打印未排序的静态表
    SelectSort(ST.elem,10);     // 调用插入排序函数,对静态表中的数据进行排序
    STPrint(ST);                // 再次打印静态表,这次是排序后的结果
    scanf("%d");                // 防止程序立即退出
    return 0;
}


http://www.mrgr.cn/news/62224.html

相关文章:

  • HTMLCSS:3D旋转动画机器人摄像头
  • img 标签的 object-fit 属性
  • MySQL主从复制、读写分离
  • Python小游戏14——雷霆战机
  • Java中String的length与Oracle数据库中VARCHAR2实际存储长度不一致的问题
  • 将后端返回的网络url转成blob对象,实现pdf预览
  • 主成分分析(PCA)在医学数据分析中的神奇力量
  • 当AI取代真相,大模型如何一步步诱骗了人类的文明?
  • ubuntu增加swap交换空间
  • 车载中控系统的UI自动化测试实践
  • VB.NET中如何利用Windows Forms进行桌面应用开发
  • HCIP-HarmonyOS Application Developer V1.0 笔记(二)
  • 代码编辑器 | Visual Studio Code v1.95.0
  • C语言:动态内存管理【上】
  • leetcode hot100【LeetCode 118. 杨辉三角】java实现
  • 二十二、MySQL 8.0 主从复制原理分析与实战
  • Kylin Server V10 下编译安装 Python
  • npm ERR! path /Users/*/Desktop/task_work_all/node_modules/canvas
  • 【动态规划之斐波那契数列模型】——累加递推型动态规划
  • Java Condition 源码
  • Java避坑案例 - “激进”的线程池扩容策略及实现
  • 串口电路设计
  • 3216. 交换后字典序最小的字符串
  • 时间序列分类任务---tsfresh库
  • vscode的一些使用心得
  • Leetcode148,109以及二者的合并 -> Tencent面试算法题 - 无序双向链表转BST