数组的排序算法

embedded/2024/10/19 0:20:03/

1.冒泡排序法

原理如下:每次比较数组中相邻的两个数组元素的值,将较小的数排在较大的数前面,可实现数组元素的从小到大排序;每次将较大的数排在较小的数前面,可实现数组元素从大到小排序。

/**每次比较数组相邻的两个元素,将大的元素放在前面**/
//冒泡排序从小到大
void fun(int arr[],int n) //定义一个数组arr[],次数n;
{int i,j,temp;for(i = 0; i < n-1; i++) //比较的次数,{for(j = 0; j < n-1-i; j++)//每次需要的比较两个相邻元素的次数{if(arr[j] > arr[j+1]){temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;}}}
}
int main(int argc,char *argv[])
{int i;int arr[10];for(i = 0; i < 10; i++){scanf("%d",&arr[i]);}fun(arr,10);for(i = 0; i < 10; i++){printf("%d ",arr[i]);}printf("\n");return 0;
}
/**每次比较数组相邻的两个元素,将大的元素放在前面**/
//冒泡排序从大到小
void fun1(int arr[],int n) //定义一个数组arr[],次数n;
{int i,j,temp;for(i = 0; i < n-1; i++) //比较的次数,{for(j = 0; j < n-1-i; j++)//每次需要的比较两个相邻元素的次数{if(arr[j] < arr[j+1]){temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;}}}
}
int main(int argc,char *argv[])
{int i;int arr[10];for(i = 0; i < 10; i++){scanf("%d",&arr[i]);}fun1(arr,10);for(i = 0; i < 10; i++){printf("%d ",arr[i]);}printf("\n");return 0;
}

2.选则排序法

原理如下:每次在待排序的数组中查找到最大或最小的数组元素,将其值与最前面没有进行过排序的数组元素的值交换;

#include <stdio.h>/**选择排序从小到大排序**/
int main(int argc, char* argv[])
{int i, j=0, temp;int arr[5] = { 5,3,4,1,2 };for (i = 0; i< 4; i++){for (j = i + 1; j < 5; j++){if (arr[i] > arr[j]){temp = arr[i];arr[i] = arr[j];arr[j] = temp;}}}for (i = 0; i < 5; i++){printf("%d ", arr[i]);}return 0;
}

4.快速排序法

原理:从冒泡排序演变来的算法,使用了分治法,

首先确定数组元素第一个位置的元素为基准元素。

第一个元素的位置为L。最后一个元素的位置为R。

先用基准元素从右往左遍历,如果大于就交换,没有大于,R--;

再用基准元素从左往右遍历,如果大于于就交换,没有大于,L++;

最后插入基准值;

在对左右部分重复上述步骤;

void fun(int arr[],int start,int end)
{if(start >= end){return;}int left = start; //定义一个指向数组第一个元素的指针int right = end; 	//定义一个指向数组最后一个元素的指针int pivot = arr[left]; //取出一个基准值,一般为数组第一个值while(left < right) //左边元素的指针必须小于右边元素的指针{/**右边放左边**/while(arr[right] > pivot && left < right) //如果右边的位置的值大于基准值,并且左边指针小于右边指针{                                          right--;                              //直到右边位置的值小于或者等于基准值,不再 -} if(right > left ){arr[left] = arr[right];left++;}/**左边放右边**/while(arr[left] < pivot && left < right){left++;}if(left < right){arr[right] = arr[left];right--;}}arr[left] = pivot;  //将基准值插入中间,现在left 和 right 都指向基准值的指针fun(arr,start,left - 1); //重新排序基准左边fun(arr,right+1,end); //重新排序基准值右边
}int main(int argc,char *argv[])
{int i;int arr[5] = {3,1,2,5,4};fun(arr,0,sizeof(arr)/sizeof(arr[0]));for(i = 0; i < sizeof(arr)/sizeof(arr[0]); i++){printf("%d ",arr[i]);}printf("\n");return 0;
}

3.插入排序法

5.希尔排序

6.归并排序

6.算法>排序算法的比较


http://www.ppmy.cn/embedded/10055.html

相关文章

发票查验详情、C票据识别、发票ocr

翔云人工智能开放平台自从上架了发票识别、发票验真两个API产品接到了不少咨询&#xff0c;除了产品本身咨询&#xff0c;同时也记录了一些容易被忽略的开票注意事项&#xff0c;在此分享几个典型的示例给大家&#xff0c;希望能帮到相关业务人员。 翔云发票验真 问题1&#…

文件摆渡:安全、高效的摆渡系统助力提升效率

很多组织和企业都会通过网络隔离的方式来保护内部的数据&#xff0c;网络隔离可以是物理隔离&#xff0c;也可以是逻辑隔离&#xff0c;如使用防火墙、VPN、DMZ等技术手段来实现&#xff0c;隔离之后还会去寻找文件摆渡方式&#xff0c;来保障日常的业务和经营需求。 进行网络隔…

小程序前端调用接口(getAccessToken)获取调用凭据,调用接口(msgSecCheck)检测文本内容是否安全--最终版

序言: 集合百家之所长,方著此篇文章,废话少说,直接上代码,找好你的小程序APPID,AppSecret(小程序密钥),进行配置,然后复制粘贴代码,就可以了。 第一步:小程序前端调用接口(getAccessToken)获取调用凭据 wx.request({method: GET,url: "https://api.weixin.qq.…

java算法day2

螺旋矩阵搜索插入位置查找元素第一个位置和最后一个位置 螺旋矩阵 解法&#xff1a;模拟&#xff0c;核心在于你怎么转&#xff0c;还有就是处理边界&#xff0c;边界如何收缩&#xff0c;什么时候停止旋转。最内圈的时候怎么处理。 通过上图的模拟来解决这个问题&#xff1a;…

23种设计模式之原型模式

可以理解为克隆 浅克隆 发现改变v1日期&#xff0c;v2日期也变&#xff0c;v1 v2指向同一个date 深克隆 改造clone方法&#xff0c;克隆属性 发现改变v1日期&#xff0c;v2日期不变 原型模式适用场景 23种设计模式

区分stable diffusion中的通道数与张量维度

区分stable diffusion中的通道数与张量形状 1.通道数&#xff1a;1.1 channel 31.2 channel 4 2.张量形状2.1 3D 张量2.2 4D 张量2.2.1 通常2.2.2 stable diffusion 3.应用3.1 问题3.2 举例 前言&#xff1a;通道数与张量形状都在数值3和4之间变换&#xff0c;容易混淆。 1.通…

第52篇:算法的硬件实现<三>

Q&#xff1a;本期我们介绍二进制搜索算法电路&#xff0c;用于查找某个数据在数组中的位置。 A&#xff1a;基本原理&#xff1a;从数组的中间元素开始&#xff0c;如果给定值和中间元素的关键字相等&#xff0c;则查找成功&#xff1b;如果给定值大于或者小于中间元素的关键…

【氮化镓】GaN HEMT SEEs效应影响因素和机制

研究背景&#xff1a;AlGaN/GaN HEMT因其在高电压、高温和高频率下的操作能力而受到关注&#xff0c;尤其在航空航天和汽车应用中&#xff0c;其辐射响应变得尤为重要。重离子辐射可能导致绝缘体失效&#xff0c;即单事件效应&#xff08;SEEs&#xff09;引起的栅介质击穿。 …