冒泡,选择,插入,希尔,快速,归并

news2024/9/21 22:55:01

冒泡,选择,插入,希尔,快速,归并

选择类的排序:选择排序,堆排序
交换类的排序:冒泡,快排
在这里插入图片描述

#include <stdio.h>
#include<stdbool.h>
#include<stdlib.h>
#define swap(a,b) {typeof(a) t=(a);a=b;b=t;}
#define LEN 15
typedef void (*SortFP)(int *,int );
void show(int *,int );


//冒泡1
void bubble_sort(int *arr,int n)
{
	bool flag=true;
	for(int i=0;i<n-1&&flag;i++ )
	{
		flag=false;
		for(int j=0;j<n-i-1;j++)
		{
			if(arr[j]>arr[j+1])
			{
			int temp=arr[j];
			arr[j]=arr[j+1];
			arr[j+1]=temp;
			 
			 flag=true;
			}
		}
	}
	show(arr,n);
	printf(":%s\n",__func__);
}
//选择1
void Select_sorting(int *arr,int n)
{
	bool flag=true;
	for(int i=0;i<n-1&&flag;i++)
	{
		flag=false;
		int temp=i;

		for(int j=i+1;j<n;j++)
		{
			if(arr[temp]>arr[j])
					temp=j;

				flag=true;
		}
		if(temp!=i)
		{
			int temp1=arr[temp];
			arr[temp]=arr[i];
			arr[i]=temp1;
		}		
	}
	show(arr,n);
	printf(":%s\n",__func__);
}

//插入1
void insertion_Sort(int *arr,int n)
{
	int i;
	for(int j=1;j<n;j++)
	{
		int temp=arr[j];
		for( i=j;i>0&&arr[i-1]>temp;i--)
		{
				arr[i]=arr[i-1];
		}
		arr[i]=temp;
	}
}

//插入2
void insertion_Sort2(int *arr,int n)
{
	for(int i=1,j=0;i<n;i++)
	{
		int val=arr[i];
		for( j=i;j>0&&arr[j-1]>val;j--)
		{
			arr[j]=arr[j-1];	
		}
		if(j!=i)  arr[j]=val;
		}
		show(arr,n);
		printf(":%s\n",__func__);
	
		
}
//希尔1
void shell_sort(int *arr,int n)
{
	int i;	
	
	for(int d=n>>1;d>0;d=d>>1)
	{
	for(int j=d;j<n;j=d+j)
	{
		int temp=arr[j];	
		for( i=j;i>=d&&arr[i-d]>temp;i-=d)
		{
			arr[i]=arr[i-d];	
			
		}
		arr[i]=temp;
	}

	
	}
}
//希尔2
void shell_Sort2(int *arr,int n)
{
	for(int d=n/2;d>0;d/=2)
	{
	for(int i=d,j=0;i<n;i++)
	{
		int val=arr[i];
		for( j=i;j>=d&&arr[j-d]>val;j=j-d)
		{
			arr[j]=arr[j-d];	
		}
		if(j!=i)  arr[j]=val;
		}

	}
		show(arr,n);
		printf(":%s\n",__func__);
	
}	
		
//归并1
void Merge_sort(int *arr,int *reg,int start,int end)
{
	if(start>=end )return ;
	
	int	len=end-start;
	int	mid=(len>>1)+start;
	int	start1=start,end1=mid;
	int start2=mid+1,end2=end;
	
	Merge_sort(arr,reg,start1,end1);
	Merge_sort(arr,reg,start2,end2);
	
	int k=start;
	while(start1<=end1&&start2<=end2)
	{
		reg[k++]=arr[start2]>arr[start1]?arr[start1++]:arr[start2++];
	}
	
	while(start1<=end1)
	{
	 	reg[k++]=arr[start1++];	
	}
	while(start2<=end2)
	{
		reg[k++]=arr[start2++];	
		
	}
	for(k=start;k<=end;k++)
	{
		arr[k]=reg[k]	;
		
	}
	
}

//快速1
void Quick_Sort(int *arr,int l,int h)
{
	if(l>=h) return ;
	int low=l;
	int high=h;
	int pivot=arr[low];


	while(low<high)
	{
	while(low<high&&arr[high]>=pivot) high--;	
		arr[low]=arr[high];
	
	while(low<high&&arr[low]<pivot)low++;
		arr[high]=arr[low];
		
	}
	arr[low]=pivot;

	Quick_Sort(arr,l,low-1);
	Quick_Sort(arr,low+1,h);
	
}

void quick_sort(int *arr,int len)
{
	  Quick_Sort(arr,0,len-1);
 		show(arr,len);
		printf(":%s\n",__func__);
}




void show(int *arr,int n)
{
	for(int i=0;i<n;i++)
	{
		printf("%d ",arr[i]);	
	}
	printf("\n");
}




int main(int argc,const char* argv[])
{
	int arr[LEN]={};
	SortFP sort[]={bubble_sort,Select_sorting,insertion_Sort2,shell_Sort2,quick_sort};
	for(int i=0;i<sizeof(sort)/sizeof(sort[0]);i++)
	{
		for(int j=0;j<LEN;j++)
		{
			arr[j]=rand()%100;
			printf("===");
		}
		
		printf("\n");
	
	show(arr,LEN);
	printf("排序前\n");
	sort[i](arr,LEN);
}
   //bubble_sort(arr,n);   //冒泡
	//Select_sorting(arr,n);//选择排序
	//shell_sort(arr,n);      //希尔排序
	//insertion_Sort(arr,n);  //插入排序
	//quick_sort(arr,n);
	/*int reg[6]={};
	Merge_sort(arr,reg,0,n-1);//归并排序*/
	
	return 0;
}

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

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

相关文章

Hidden Marlov Model(HMM)

一、Model 1、将声学特征设为X&#xff0c;经过语音识别得到的tokens设为Y&#xff0c;目标是找到通过X得到Y的最大概率&#xff0c;可以通过概率公式改变为 分为两个概率 2、将tokens序列Y转化为states序列S&#xff0c;声学特征分得更细 3、从states到声学特征的过程 二、HM…

力扣面试经典算法150题:罗马数字转整数

罗马数字转整数 今天的题目是力扣面试经典150题中的数组的简单题: 罗马数字转整数 题目链接&#xff1a;https://leetcode.cn/problems/roman-to-integer/description/?envTypestudy-plan-v2&envIdtop-interview-150 题目描述 将一个罗马数字转换成相应的整数。输入是一…

面向未来的低代码开发:人工智能与机器学习的结合

引言 在当今飞速发展的数字化世界中&#xff0c;技术的进步正以前所未有的速度改变着各个行业的运营方式。其中&#xff0c;低代码开发和人工智能&#xff08;AI&#xff09;、机器学习&#xff08;ML&#xff09;这两大技术的结合&#xff0c;正在推动着软件开发领域的又一次变…

身份证OCR识别接口如何用Java调用

一、什么是身份证OCR识别接口&#xff1f; 身份证OCR识别接口又叫身份证识别&#xff0c;身份证图像识别&#xff0c;身份证文字识别&#xff0c;即自动识别和提取身份证上的文字和数字信息。它可以通过图像处理和模式识别算法&#xff0c;将身份证中的姓名、性别、民族、出生…

我们从过去一年的大模型构建过程中学到的经验

当下正是使用大型语言模型&#xff08;LLM&#xff09;构建应用的好时机。过去一年&#xff0c;LLM 已经发展到了足够用于实际应用的水平。LLM 的进化速度与社交媒体层出不穷的演示应用&#xff0c;将在 2025 年吸引对 AI 领域的约 2000 亿美元投资。LLM 的门槛也很低&#xff…

Dbeaver 直连数据库下载数据到本地

参考文章&#xff1a;win11中DBeaver超详细下载与数据库MySQL 要使用 DBeaver 直接连接数据库并将数据下载到本地&#xff0c;您可以按照以下步骤操作&#xff1a; 1. 连接到数据库 打开 DBeaver。点击左上角的“Database”菜单&#xff0c;选择“New Database Connection”…

【数学建模】【2024国赛前必看内容】python基础速成教学及常用python代码包

一、内容介绍 Python在各个编程语言中比较适合新手学习&#xff0c;Python解释器易于扩展&#xff0c;可以使用C、C或其他可以通过C调用的语言扩展新的功能和数据类型。 Python也可用于可定制化软件中的扩展程序语言。Python丰富的标准库&#xff0c;提供了适用于各个主要系统…

<Qt> 系统 - 文件

目录 一、Qt文件概述 二、输入输出设备类 三、文件读写类 四、文件和目录信息类 一、Qt文件概述 文件操作是应用程序必不可少的部分。Qt 作为一个通用开发库&#xff0c;提供了跨平台的文件操作能力。Qt 提供了很多关于文件的类&#xff0c;通过这些类能够对文件系统进行操…

Linux centos stream 9命令及源码

学过linux操作系统的人,对文件、命令比较熟悉。最多的操作是用命令处理文件。 随着学习的深入,会提出疑问:命令长什么样? 出于好奇,会找到命令存放的地方,用cat命令看一下,结果可想而知。 我们知道,命令分内部命令和外部命令,存放在不同的位置。外部命令就是一个可执…

Emacs1.0版本之重要特性及用法实例(一百五十)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 新书发布&#xff1a;《Android系统多媒体进阶实战》&#x1f680; 优质专栏&#xff1a; Audio工程师进阶系列…

【Java 数据结构】LinkedList介绍

LinkedList介绍 回顾ArrayList类链表链表是什么链表的分类单向无头链表模拟实现初始化与基本方法查询修改增加删除 双向无头链表模拟实现初始化与基本方法查询修改增加删除 LinkedList类LinkedList类是什么回顾List接口LinkedList使用构造方法常用方法 LinkedList的遍历ArrayLi…

Windows下编译安装PETSc

本文记录在Windows下使用MinGW-w64编译安装PETSc的流程。 0、环境 操作系统Windows 11MSYS2msys2-x86_64-20240507 1、开发环境 首先&#xff0c;下载并安装MSYS2&#xff0c;然后编辑PATH环境变量&#xff0c;添加mingw64相关路径&#xff1a;C:\msys64\mingw64\bin。 然后…

鼠标为什么要放在鼠标垫上才好用?/ 鼠标的工作原理

原创 OREO 力学科普 在数字化时代&#xff0c;鼠标已经成为我们与计算机交互不可或缺的工具。它不仅提高了工作效率&#xff0c;也丰富了我们的数字生活。鼠标总是能精准地感应到人手的移动方向和距离&#xff0c;从而到达人指定的位置&#xff0c;给我们的计算机操作过程带来…

【区块链+乡村振兴】链上云仓智慧动产监管平台 | FISCO BCOS应用案例

2021 年初 ,《中共中央国务院关于全面推进乡村振兴加快农业农村现代化的意见》将“乡村振兴”的重要性提升 到前所未有的战略高度。而随着科技与金融的深度融合&#xff0c;金融行业亦开始步入大数据、云计算、人工智能、区块 链的新技术发展。启动金融科技赋能乡村振兴示范工程…

企业级营销中心应用架构设计

营销中心依托大数据和数据分析应用,搭建灵活可扩展的系统架构,在客户分群、客户画像、客户标签库及模型工厂的基础上,建立营销全流程管理,包括营销活动的发起、执行、反馈和评价,助力银行实现以数据驱动的精准营销模式。此外,还可提供丰富的场景营销解决方案,协助银行打…

java3d-1_4_0_01-windows-i586.exe

下载 Java 3D API 安装 C:\Program Files\Java\Java3D\1.4.0_01\bin C:\Java\jre6 C:\Java\jdk1.6.0_45 C:\Windows 记录下这 4 个目录&#xff0c;去检查下 4 哥目录下文件多了什么 检查目录① C:\Program Files\Java\Java3D\1.4.0_01\bin 检查目录② C:\Java\jre6 C:…

LVS服务的搭建之NAT模式、DR模式的搭建实战

# LVS的概述 1/什么是LVS linux virtural server的简称&#xff0c;也就是linxu虚拟机服务器&#xff0c;使用lvs可以达到的技术目标是&#xff1a;通过linux达到负载均衡技术和linux操作系统实现一个高性能高可用的linux服务器集群&#xff0c;他具有良好的可靠性&#xff0…

Deepin-Bash中判断是Wayland还是X11显示

Bash中判断是Wayland还是X11显示 一、概述 一、概述 记录一下Linux显示协议的类型 echo $XDG_SESSION_TYPE如果输出是 x11&#xff0c;则使用的 Xorg如果输出是 wayland&#xff0c;则使用的 Wayland

气膜滑雪场重新定义滑雪体验的未来—轻空间

随着滑雪运动的日益普及&#xff0c;滑雪场的建设标准也在不断提高。气膜滑雪场作为一种创新的建筑形式&#xff0c;以其独特的技术优势&#xff0c;正在重新定义滑雪体验。与传统滑雪场相比&#xff0c;气膜滑雪场不仅提升了运营效率&#xff0c;还为滑雪者提供了更为舒适、安…