选择排序、快速排序和插入排序

1. 选择排序

xuanze_sort.c

#include<stdio.h>
#include<stdlib.h>//选择排序void xuanze_sort(int arr[],int sz){//正着for(int i=0;i<sz;i++){//外层循环从第一个数据开始依次作为基准数据for(int j =i+1;j<sz;j++){//int j =i+1 因为第一个数据作为了基准数据,所以每次比较从他的下一个数据开始if(arr[i]>arr[j]){//arr[i]作为基准数据如果有元素小于基准数据,就将此元素作为基准数据int tmp = arr[i];arr[i] = arr[j];arr[j] = tmp;}}}//反着// for(int i=0;i<sz;i++){//     //外层循环从第一个数据开始依次作为基准数据//     for(int j =sz-1;j>i;j--){//int j =i+1 因为第一个数据作为了基准数据,所以每次比较从他的下一个数据开始//         if(arr[i]>arr[j]){//arr[i]作为基准数据如果有元素小于基准数据,就将此元素作为基准数据//             int tmp = arr[i];//             arr[i] = arr[j];//             arr[j] = tmp;//         }//     }// }
}int main()
{int arr[] = {5, 4,3,15,12,24,2,1};int sz = sizeof(arr)/sizeof(arr[0]);xuanze_sort(arr,sz);for(int i=0;i<sz;i++){printf("%d ",arr[i]);}return 0;
}

2.快速排序

思路:

1)创建一张表,表对顺序没有要求

2)从表中找到一个数据,作为基准数据,基准数据一般是用表中的第一个数据(最后一个数据)作为基准数据

3)设置两个哨兵A和B,一个哨兵A是指向表中的第一个数据元素,另外一个哨兵B指向表中的最后一个数据元素

4)哨兵B开始从右往左开始行走,直到走到比基准数据小的就停下;哨兵A从左往右开始行走,直到走到比基准数据大的就停下;只要哨兵A和哨兵B没有相遇,就将哨兵A指向的数据与哨兵B指向的数据进行交换;当哨兵A和哨兵B相遇(即指向同一个数据元素),这时候就将哨兵指向的数据元素与基准数据进行交换

qiuck_sort.c

#include<stdio.h>
#include<stdlib.h>void quick_sort(int arr[],int left,int right){if(left>=right){//跳出递归的条件return;}int l = left;int r = right;int base = arr[left];//指定基准数据while(l != r){//只要左右哨兵不相遇就一直循环//右边遇到比基准数据小的停止while(l<r && arr[r]>=base){r--;}//左边遇到比基准数据大的停止while(l<r && arr[l]<=base){l++;}//左右哨兵停止且没有相遇时,交换各自所指向的元素if(l<r){int tmp = arr[l];arr[l] = arr[r];arr[r] = tmp;}}//左右哨兵相遇时,就将烧饼所指的数据和基准数据交换//至此到这,交换后的基准数,左边都比自己小,右边都比自己大if(l == r){int tmp = arr[left];arr[left] = arr[r];arr[r] = tmp;}//以刚刚的基准数据为中心将数组分为两半quick_sort(arr,left,r-1);//左半部分递归quick_sort(arr,r+1,right);//右半部分递归}int main()
{int arr[] = {2,2,3,2,2};int sz = sizeof(arr)/sizeof(arr[0]);quick_sort(arr,0,sz-1);for(int i=0;i<sz;i++){printf("%d ",arr[i]);}return 0;
}

3.插入排序

取出数组中的第二个元素,从此开始遍历,将此此元素从后向前依次比较,如果被比较元素比他大,被比较元素就往后移,直到找到比他小的元素为止,然后将他放入比它小的元素的位置后面

insert_sort2.c

#include<stdio.h>//插入排序void insert_sort(int arr[],int sz){for(int i=1;i<sz;i++){//首先取出数组的第二个元素,从此开始遍历int tmp = arr[i];//成为基准数据 拿到第元素后,从这个元素开始由后向前与其前面的元素做比较int pos = i-1;//记录基准数据前一个数据的下标while(pos>=0 && tmp<arr[pos]){//如果基准元素小于前一个元素,就将其往前移动,即前面的元素向后移动,以此类推循环arr[pos+1] = arr[pos];//即前面的元素向后移动pos--;}arr[pos+1] = tmp;//将基准数据放入空位}
}int main()
{int arr[] = {8,2,1,4,2,9,3};int sz = sizeof(arr)/sizeof(arr[0]);insert_sort(arr,sz);for(int i=0;i<sz;i++){printf("%d ",arr[i]);}return 0;
}

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

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

相关文章

挑战内网安全难题,迅软DSE如何以管控之力助您一臂之力?

随着信息化程度的提高&#xff0c;政企单位面临更加复杂和不可控的内网安全问题。由于缺乏有效技术手段和完善的管理机制&#xff0c;企业内网管理长期处于被动状态&#xff0c;而在发生数据安全事件后的快速处置能力也相对薄弱。 迅软DSE桌面管理系统成为解决方案&#xff0c…

【第2期】Springboot如何快速集成SpringSecurity

简单介绍 本专栏主要结合实战讲解&#xff0c;不过多介绍细节的概念&#xff0c;概念可以通过搜索引擎查找&#xff0c;一搜一大把&#xff0c;切入正题。 本专栏的实战项目是基于SpringbootSpringSecurityRSAJWTVUE的全栈开发项目&#xff0c;每个环节都会专门讲&#xff0c;…

SpringBoot + Vue前后端分离项目实战 || 三:Spring Boot后端与Vue前端连接

系列文章&#xff1a; SpringBoot Vue前后端分离项目实战 || 一&#xff1a;Vue前端设计 SpringBoot Vue前后端分离项目实战 || 二&#xff1a;Spring Boot后端与数据库连接 SpringBoot Vue前后端分离项目实战 || 三&#xff1a;Spring Boot后端与Vue前端连接 SpringBoot V…

力扣200. 岛屿数量(java DFS解法)

Problem: 200. 岛屿数量 文章目录 题目描述思路解题方法复杂度Code 题目描述 思路 该问题可以归纳为一类遍历二维矩阵的题目&#xff0c;此类中的一部分题目可以利用DFS来解决&#xff0c;具体到本题目&#xff1a; 1.我们首先要针对于二维数组上的每一个点&#xff0c;尝试展…

搜维尔科技:让鳄鱼在银幕上唱跳,奇幻电影《鳄鱼莱莱》幕后揭秘

把《鳄鱼莱莱》从儿童读物改编成真人电影&#xff0c;这绝非易事。首先需要塑造一条长一米八的鳄鱼&#xff0c;然后还能栩栩如生地唱歌跳舞&#xff0c;并与奥斯卡获奖演员哈维尔巴登&#xff08;Javier Bardem&#xff09;一起表演&#xff0c;向观众展现原作中吸引人的神奇之…

B01、JVM与Java体系结构-01

字节码与多语言混合编程 字节码概述&#xff1a; 我们平时说的java字节码&#xff0c;指的是用java语言编译成的字节码。准确的说任何能在jvm平台上执行的字节码格式都是一样的。所以应该统称为&#xff1a;jvm字节码。不同的编译器&#xff0c;可以编译出相同的字节码文件&…

Docker实战案例研究:深入行业应用与最佳实践

Docker作为一种轻量级、可移植、可扩展的容器化技术&#xff0c;在各行各业都得到了广泛应用。本文将通过深入实际案例&#xff0c;介绍Docker在不同行业的应用以及相应的最佳实践&#xff0c;提供更加丰富的示例代码&#xff0c;以帮助大家更全面地理解和运用Docker的强大功能…

法大大邀业内大咖剖析汽车名企数智化实战路径

法大大发布中国首部《汽车行业合同数智化白皮书》&#xff0c;聚焦趋势&#xff0c;解读行业数字化转型攻坚战的破局之道&#xff1b;深入内部&#xff0c;剖析名企数字化的探索实践。 长安汽车、蔚来汽车、上汽大通、 东风汽车集团、奥托立夫、长城滨银汽金… 一众名企高层…

sqlserver dba日常操作

查询慢sql的方法 1.whoisactive 安装方法 http://whoisactive.com/downloads/下载地址 将下载好的zip包放到sqlserver服务器中 文件-打开-文件-下载好的zip包-在查询窗口点击执行 新建一个查询窗口&#xff0c;输入sp_whoisactive&#xff0c;获取当前运行的所有sql语句 使用…

宝塔部署flask项目

宝塔(bt.cn)部署flask项目&#xff0c;发现问题还挺多。不过终于是搞定了。 先可以用pycharm建一个空的flask项目&#xff0c;这样好发现问题。 到网站栏目点击python项目&#xff0c;新建一个python项目。 要选择flask框架&#xff0c;uwsgi运行方式。 端口如果选择80端口&a…

执行计划EXPLAIN详解

什么是EXPLAIN&#xff1f; EXPLAIN是MySQL提供的一条语句&#xff0c;用于详细展示MySQL如何执行一条SELECT语句。通过使用EXPLAIN&#xff0c;开发者可以看到MySQL如何处理查询及连接表&#xff0c;帮助我们诊断性能问题。 使用方法非常直接&#xff0c;只需在SELECT查询前…

儿童玩具行业分析:发展态势良好,市场空间不断拓展

玩具是有利于促进幼儿体、德、智、美的全面发展;符合儿童年龄特征&#xff0c;能满足其好奇心、好动和探索活动的愿望;造型优美&#xff0c;反映事物的典型特征;活动多变&#xff0c;有助于鼓励学习。中国玩具产品包括毛绒玩具、塑胶玩具、纸质玩具、电子玩具、木制玩具、金属玩…