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

C语言四大排序算法实战

今天主要我练习了 C语言中的几种常见排序算法。包括以下内容、:

  1. 使用 qsort() 的标准库快速排序

  2.  手写冒泡排序

  3.  手写快速排序

  4.  插入排序

(一)四种算法区别

(二)使用 qsort() 函数的快速排序

#include<stdio.h>
#include<stdlib.h>
#include<time.h>// qsort 的比较函数
int compare(const void* left, const void* right)
{return *(int*)left - *(int*)right;
}int main()
{int arr1[10] = { 1,3,2,4,6,5,8,7,9,11 };// 使用 C 标准库的 qsort 进行排序qsort(arr1, 10, sizeof(int), compare);// 输出排序结果for (int i = 0; i < 10; i++){printf("%d ", arr1[i]);}return 0;
}

(三)冒泡排序

#include<stdio.h>
#include<stdlib.h>
#include<time.h>typedef int elemtype;
typedef struct sttable {elemtype* data;int len;
}sttable;// 初始化结构体并随机生成数据
void init_ST(sttable& ST, int length)
{ST.len = length;ST.data = (elemtype*)malloc(sizeof(elemtype) * ST.len);srand(time(NULL));for (int i = 0; i < ST.len; i++){ST.data[i] = rand() % 100;}
}// 冒泡排序(双层循环,两两比较)
void bubble_ST(sttable& ST, int n)
{for (int i = 0; i < n - 1; i++){for (int j = 0; j < n - i - 1; j++){if (ST.data[j] > ST.data[j + 1]){// 使用异或实现交换ST.data[j] = ST.data[j] ^ ST.data[j + 1];ST.data[j + 1] = ST.data[j] ^ ST.data[j + 1];ST.data[j] = ST.data[j] ^ ST.data[j + 1];}}}
}// 打印数组
void print_ST(sttable ST)
{for (int i = 0; i < ST.len; i++){printf("%3d", ST.data[i]);}printf("\n");
}int main()
{sttable ST;init_ST(ST, 10);print_ST(ST);bubble_ST(ST, 10);print_ST(ST);return 0;
}

(四)快速排序

#include<stdio.h>
#include<stdlib.h>
#include<time.h>typedef int elemtype;
typedef struct Sstable {elemtype* data;int length;
}sstable;// 初始化随机数组
void init_table(sstable& ST, int len)
{ST.length = len;ST.data = (elemtype*)malloc(sizeof(elemtype) * ST.length);srand(time(NULL));for (int i = 0; i < ST.length; i++){ST.data[i] = rand() % 100;}
}// 打印数组
void print_ST(sstable ST)
{for (int i = 0; i < ST.length; i++){printf("%3d", ST.data[i]);}printf("\n");
}// 划分函数:返回枢轴位置
int partition(int* p, int low, int high)
{int pivot = p[low];while (low < high){while (low < high && p[high] >= pivot)high--;p[low] = p[high];while (low < high && p[low] <= pivot)low++;p[high] = p[low];}p[low] = pivot;return low;
}// 快速排序递归实现
void quick_sort(int* p, int low, int high)
{if (low < high){int pivot_pos = partition(p, low, high);quick_sort(p, low, pivot_pos - 1);quick_sort(p, pivot_pos + 1, high);}
}int main()
{sstable ST;init_table(ST, 10);print_ST(ST);quick_sort(ST.data, 0, 9);print_ST(ST);return 0;
}

(五)插入排序(直接插入法)

#include<stdio.h>
#include<stdlib.h>
#include<time.h>typedef int elemtype;
typedef struct Sstable {elemtype* data;int length;
}sstable;// 初始化随机数组
void init_table(sstable& ST, int len)
{ST.length = len;ST.data = (elemtype*)malloc(sizeof(elemtype) * ST.length);srand(time(NULL));for (int i = 0; i < ST.length; i++){ST.data[i] = rand() % 100;}
}// 打印数组
void print_ST(sstable ST)
{for (int i = 0; i < ST.length; i++){printf("%3d", ST.data[i]);}printf("\n");
}// 直接插入排序
void insert_sort(int* p, int n)
{int i, j, interval;for (i = 1; i < n; i++){interval = p[i]; // 保存待插入元素for (j = i - 1; j >= 0 && p[j] > interval; j--){p[j + 1] = p[j]; // 向后移动}p[j + 1] = interval; // 插入到正确位置}
}int main()
{sstable ST;init_table(ST, 10);print_ST(ST);insert_sort(ST.data, 10);print_ST(ST);return 0;
}

http://www.dtcms.com/a/474796.html

相关文章:

  • 自己做效果图的网站推广优化网站
  • 2025 年 10 月 TIOBE 指数
  • 网站建设合同属于技术合同吗企业网站设计专业好吗
  • cdr可不可做网站公司简介概况怎么写
  • 做区位分析的网站重庆的企业的网站建设
  • Claude Code 本地部署实战:打造属于你的 AI 编程助手
  • 【11408学习记录】考研数学精华:矩阵相似全解——从定义到判别一网打尽!
  • tk网站注册阿里企业邮箱电话
  • visual c 网站开发百度网站公司信息推广怎么做
  • anthropics-claude-cookbooks学习记录02
  • 海南省住房与城乡建设部网站在那些网站可以接兼职做
  • MYSQL学习笔记(个人)(第十四天)
  • pc做网站服务器网站前台模板 html
  • AngularJS 路由
  • 网站建设需要哪些费用支出网站域名骗子
  • 英文网站开发哪家好外卖网站开发
  • 保姆级教程:如何用feishu2md快速下载飞书文档为md文件
  • 上海专业网站建设公司排名做签证网站
  • 手机网站大全推荐比较有名的公司网站
  • 福州网站建设策划方案天健emp软件开发平台
  • React useState详解与使用指南(函数式更新)
  • 网站主域名南昌集团制作网站公司
  • 做视频网站的流程软件项目外包平台
  • 图片类网站建设全国卫生机构建设管理系统网站
  • 网站建设实训意见建议企业宣传网页设计
  • 最新版谷歌浏览器视频播放控件ElephVideoPlayer控件介绍
  • SAP MM供应商主数据维护接口分享
  • 第二章:模块的编译与运行-11 Preliminaries
  • 在手机上建网站小程序免费制作平台 知乎
  • 浑南区建设局网站做外贸在什么网站做