【C/C++】排序算法代码实现

这里,汇总了常见的排序算法具体代码实现。使用C语言编写。

排序算法实现

  • 插入排序
  • 冒泡排序
  • 选择排序
  • 快速排序
  • 希尔排序
  • 归并排序

插入排序

#include <stdio.h>
#include <stdlib.h>void InsertSort(int arr[],int n){int i,j,temp;for(i = 1;i < n;i++){   //将各元素插入已排好的序列中if(arr[i] < arr[i-1]){  //若当前元素小于前驱temp = arr[i];    //暂存当前元素for(j = i-1;j >= 0 && arr[j] > temp;j--)  //检查前面所有排好的元素arr[j+1] = arr[j];  //所有大于temp的元素后移arr[j+1] = temp;  //复制到插入位置(j+1:j--多减了一个要加回来)}}
}int main()
{int a[] = {12,32,61,5,9,63,89,2};for(int i=0;i<8;i++)printf("%d ",a[i]);InsertSort(a,8);printf("\n");for(int i=0;i<8;i++)printf("%d ",a[i]);return 0;
}

冒泡排序

#include <stdio.h>
#include <stdlib.h>void bubbleSort(int arr[],int n){for(int i=0;i<n-1;i++){//外层循环,n个元素需要循环n-1次for(int j=0;j<n-1-i;j++){  //内层循环,n个元素第i趟比较n-i次if(arr[j]>arr[j+1]){  //将较大的元素后移int temp = arr[j+1];arr[j+1] = arr[j];arr[j] = temp;}}}
}int main()
{int a[] = {12,32,61,5,9,63,89,2};for(int i=0;i<8;i++)printf("%d ",a[i]);bubbleSort(a,8);printf("\n");for(int i=0;i<8;i++)printf("%d ",a[i]);return 0;
}

选择排序

#include <stdio.h>
#include <stdlib.h>void selectSort(int a[],int n){int i,j,min = 0;for(i=0;i<n-1;i++){min = i;for(j=i+1;j<n;j++){if(a[j]<a[min]){  //寻找最小的数min = j;  //寻找最小的索引保存}}if(i!= min){int tmp = a[i];a[i] = a[min];a[min] = tmp;}}
}int main()
{int a[] = {12,32,61,5,9,63,89,2};for(int i=0;i<8;i++)printf("%d ",a[i]);selectSort(a,8);printf("\n");for(int i=0;i<8;i++)printf("%d ",a[i]);return 0;
}

快速排序

#include <stdio.h>
#include <stdlib.h>void quickSort(int a[],int begin,int end){if(begin>=end) return;  //递归结束条件int i = begin,j = end,flag = a[i],tmp = 0;  //第一个为基准while(i!=j){while((i<j)&&(a[j]>flag)) j--; //从最后一个元素出发,每次循环j--,直到找到比flag小的数字,记录下标while((i<j)&&(a[i]<=flag)) i++;  //从开头元素出发,每次循环i++,直到找到比flag大的数字,记录下标if(j>i){  //交换tmp = a[i];a[i] = a[j];a[j] = tmp;}}a[begin] = a[i];a[i] = flag;  //交换基准数与i和j相遇的位置的数quickSort(a,begin,i-1);  //左子数组递归quickSort(a,i+1,end);   //右子数组递归
}int main()
{int a[] = {12,32,61,5,9,63,89,2};for(int i=0;i<8;i++)printf("%d ",a[i]);quickSort(a,0,7);printf("\n");for(int i=0;i<8;i++)printf("%d ",a[i]);return 0;
}

希尔排序

#include <stdio.h>
#include <stdlib.h>void shellSort(int a[], int n){int i,j,gap;  // gap为步长,每次减为原来的一半for (gap = n / 2; gap > 0; gap /= 2){  // 共gap个数组,对每一组都执行直接插入排序for (i = 0; i < gap; i++) {for (j = i + gap; j < n; j += gap){  // 如果a[j]<a[j-gap],则寻找a[j]位置,并将后面的位置都后移if (a[j] < a[j - gap]){int tmp = a[j];int k = j - gap;while (k >= 0 && a[k] > tmp){a[k + gap] = a[k];k -= gap;}a[k + gap] = tmp;}}}}
}int main()
{int a[] = {12,32,61,5,9,63,89,2};for(int i=0;i<8;i++)printf("%d ",a[i]);shellSort(a,8);printf("\n");for(int i=0;i<8;i++)printf("%d ",a[i]);return 0;
}

归并排序

#include <stdio.h>
#include <stdlib.h>void Merge(int arr[], int tmp[], int start,int mid, int end){//合并小组并排序int i = start;  //i标识,左小组的第一个元素位置int j = mid + 1;//j标识,右小组的第一个元素位置int k = start;  //tmp当前小组存放的起始位置while (i < mid + 1 && j < end + 1){//左小组越界或右小组越界才能退出if (arr[i] <= arr[j])tmp[k++] = arr[i++];elsetmp[k++] = arr[j++];}while (j < end + 1){  //如果右边小组没有越界tmp[k++] = arr[j++];}while (i < mid + 1){  //如果左边小组没有越界tmp[k++] = arr[i++];}for (i = start; i <= end; i++){arr[i] = tmp[i];}
}void MergeS(int arr[], int tmp[], int start, int end){//划分小组,现在没有endif (start < end){int mid = (start+end)/2;MergeS(arr, tmp, start, mid);MergeS(arr, tmp, mid + 1, end);Merge(arr, tmp, start, mid, end);}
}void mergeSort(int arr[], int len){int *tmp = (int *)malloc(sizeof(int)*len);//开了一个排序后结果保存的临时数组MergeS(arr, tmp, 0, len - 1);//嵌套调用free(tmp);
}int main()
{int a[] = {12,32,61,5,9,63,89,2};for(int i=0;i<8;i++)printf("%d ",a[i]);mergeSort(a,8);printf("\n");for(int i=0;i<8;i++)printf("%d ",a[i]);return 0;
}

不同排序算法之间的比较:
在这里插入图片描述

以上属个人见解。
❤️希望对您有帮助,您的支持是我创作最大的动力!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/163533.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python 异常的传递性

实例 这里就简单用2个function来演示一下异常的传递性 func1 这里num 1/0明显是一个ZeroDivisionError错误&#xff0c;作为演示 def func1():print("fun1 开始执行")num 1 / 0print("func1 结束执行") func2 def func2():print("func2 开始执…

tomcat国密ssl测试

文章目录 程序包准备部署配置访问测试 程序包准备 下载 tomcat8.5 https://www.gmssl.cn/gmssl/index.jsp 下载 tomcat 国密组件及证书 本次测试所有的程序文件均已打包&#xff0c;可以直接 点击下载 部署配置 自行完成 完成centos 的jdk配置。 部署tomcat,将 gmssl4t.jar…

数字孪生农村供水工程平台:为乡村振兴注入新活力

随着科技的不断进步&#xff0c;数字孪生技术逐渐成为各行业创新发展的重要驱动力。在水利领域&#xff0c;数字孪生农村供水平台以其独特的优势&#xff0c;为农村供水系统带来了革命性的变革。本文将为您详细介绍数字孪生农村供水平台的核心特点及优势&#xff0c;带您领略智…

深度学习常见激活函数:ReLU,sigmoid,Tanh,softmax,Leaky ReLU,PReLU,ELU整理集合,应用场景选择

文章目录 1、ReLU 函数&#xff08;隐藏层中是一个常用的默认选择&#xff09;1.1 优点1.2 缺点 2、sigmoid 函数2.1 优点2.2 缺点 3、Tanh 函数3.1 优点3.2 缺点 4、softmax 函数&#xff08;多分类任务最后一层都会使用&#xff09;5、Leaky ReLU 函数5.1 优点5.2 缺点 6、PR…

mongo DB -- aggregate分组查询后字段展示

一、分组查询 在mongoDB中可以使用aggregate中的$group操作对集合中的文档进行分组,但是查询后的数据不显示其他字段,只显示分组字段 aggregate进行分组示例 db.collection.aggregate([{$group: {_id: "$field"}},]) 查询后显示 展开只显示两个字段 二、显示所有字段…

APM工具skywalking部署

一 整体架构 整个架构&#xff0c;分成上、下、左、右四部分&#xff1a; 上部分 Agent &#xff1a;负责从应用中&#xff0c;收集链路信息&#xff0c;发送给 SkyWalking OAP 服务器。目前支持 SkyWalking、Zikpin、Jaeger 等提供的 Tracing 数据信息。而我们目前采用的是&…

SQL基础理论篇(九):存储过程

文章目录 简介存储过程的形式定义一个存储过程使用delimiter定义语句结束符存储过程中的三种参数类型流控制语句 存储过程的优缺点参考文献 简介 存储过程Stored Procedure&#xff0c;SQL中的另一个重要应用。 前面说的视图&#xff0c;只能勉强跟编程中的函数相似&#xff…

小程序订阅消息

wx.requestSubscribeMessage({tmplIds: [2IdqlWrqSbjAurzIuW8imeK-ftS8gbhYdZ0icdE],success(res) {console.log(res);// 处理用户授权结果},fail(err) {console.error(err);// 处理授权请求失败}});

重磅!1区、60年老牌期刊被踢?共5本被剔除!11月SCIE/SSCI期刊目录更新!

期刊动态&#xff1a;2023年11月SCI、SSCI期刊目录更新 2023年11月20日&#xff0c;科睿唯安更新了WOS期刊目录&#xff0c;继上次10月WOS期刊目录剔除7本SCIE&SSCI期刊之后&#xff0c;此次11月更新又有5本期刊发生变动&#xff0c;其中有4本SCIE期刊被剔除&#xff0c;1…

微信运营神器:从群发到批量添加,让你的微信营销更轻松

在这个数字化时代&#xff0c;微信已经成为了我们生活中不可或缺的一部分。对于许多企业和个人来说&#xff0c;微信营销也是非常重要的一部分。但是&#xff0c;微信营销并不是一件容易的事情&#xff0c;需要花费大量的时间和精力。为了解决这个问题&#xff0c;今天我们将向…

Linux本地MinIO存储服务远程调用上传文件

&#x1f525;博客主页&#xff1a; 小羊失眠啦. &#x1f3a5;系列专栏&#xff1a;《C语言》 《数据结构》 《Linux》《Cpolar》 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;…

淘宝返利APP草柴如何绑定淘宝账号?

草柴APP是一款淘宝、天猫、京东大额优惠券领取及购物返利省钱工具。通过草柴APP绑定淘宝账号&#xff0c;可领取淘宝大额内部隐藏优惠券&#xff0c;领取成功再购物可享券后价优惠&#xff0c;确认收货后可获得淘宝返利。 淘宝返利APP草柴如何绑定淘宝账号&#xff1f; 1、手…

Docker 快速搭建 Gitlab 服务

linux环境&#xff1a; 使用 vim 编辑 hosts 文件&#xff1a; vim /etc/hosts按 I 进入编辑模式&#xff0c;在文件末行追加上虚拟机的 IP 和要设置的域名&#xff1a; 192.168.1.17 gitlab.kunwu.toplwindows环境&#xff1a; Windows 系统的 hosts 文件位于 C:\Windows\S…

万宾科技智能井盖传感器效果,特点有哪些?

现在城市发展越来越好&#xff0c;对基础设施的改造越来越多&#xff0c;比如修路搭桥、整改生态等都是为民服务的好工程。平时走在路上我们享受着平整的路面&#xff0c;井然有序的交通也为我们带来很大的方便。但是一个又一个的井盖看起来无关紧要&#xff0c;实际上如果路上…

投标文件的注意事项

一、检查标书 1.1有时候标书需要从别的地方复制黏贴文件&#xff0c;记住复制内容可以&#xff0c;但是不要复制“落款和时间”的格式&#xff0c;落款和时间的格式借鉴你的招标文件中给响应文件格式的落款和时间&#xff0c;切记&#xff01; 1.2检查标书是否有空页&#xf…

数据科学导论——数据预处理

第1关:引言-根深之树不怯风折,泉深之水不会涸竭 第2关:数据清理-查漏补缺 import numpy as np import pandas as pd import matplotlib.pyplot as plt def student():train = pd.read_csv(Task1/diabetes_null.csv, na_values=[#NAME?])train[Insulin] = train[Insulin].f…

maxwell采集数据到kafka报错

问题&#xff1a; 启动maxwell后出现数据更新后就出现以下报错。 13:29:14,727 ERROR MaxwellKafkaProducer - TimeoutException Position[BinlogPosition[binlog.000002:12215591], lastHeartbeat1700717043797] -- maxWellData: medical:consultation:[(id,212)] 13:29:14,7…

Raptor安装

Raptor官网:https://raptor.martincarlisle.com/ 进入官网后&#xff0c;下拉找到 Download RAPTOR&#xff0c;windows系统的选择Windows Users 下载完成后打开&#xff0c;选择“next” 修改一下路径&#xff0c;不要放到C: 继续next 完结撒花

vue3的单组件的编写(三)【响应式 API 之 toRef 与 toRefs】

响应式 API 之 toRef 与 toRefs 前面讲了 ref 和 reactive 这两种响应式API &#xff0c;为了方便开发者使用&#xff0c;vue3 还出了两个用来 reactive 转换为 ref 的API&#xff0c;分别是 toRef 和 toRefs 。 &#x1f308;什么是toRef 与 toRefs 这两个API看拼写能猜到&…

css渐变详解(重复性线性渐变、径向渐变、重复性径向渐变的使用)

目录 线性渐变 重复性线性渐变 径向渐变 重复性径向渐变的使用 线性渐变 线性渐变是向下、向上、向左、向右、对角方向的颜色渐变。 其语法格式为&#xff1a; background-image: linear-gradient(side-or-corner|angle, linear-color-stop); 参数说明如下&#xff1a; …