选择排序算法
2021/4/30 1:25:22
本文主要是介绍选择排序算法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
#include <stdio.h> //最小值 //选择算法递归实现 //原理:每次从a[i]~a[n]中选择一个最大值/最小值放到序列首部(得到最值的方法时比较), //这样当i=n-1时正好求得一个排序序列 //时间复杂度分析:设原问题时间复杂度位T(n),共分成了1个子问题 //则T(n)=T(n-1)+n T(n-1):是要选择n-1次,n:是要比较的次数 (因为1,2,3...都被舍去了) //递推公式自己去算,数学就可以退出来,=O(n^2) void Select(int a[],int i,int n) { if(i<n) { int small,j,temp; small=i; //用每个递归序列的开头元素去比较 for(j=i+1;j<n;j++) if(a[j]<a[small]) small=j; //获得最小值的下标 //交换 使每一次递归 得到一个最小值,放在i-n的行首 temp=a[small]; a[small]=a[i]; a[i]=temp; Select(a,i+1,n); //进行下一次递归 } } //选择算法的非递归实现 1 算法原理:相邻元素两两比较 void Select1(int a[],int n) { int temp; for(int i=0;i<n-1;i++) for(int j=i;j<n;j++) { if(a[i]>a[j]) { temp=a[i]; a[i]=a[j]; a[j]=temp; } } } //遍历算法 void Print(int a[],int n) { for(int i=0;i<n;i++) printf("%d ",a[i]); } int main() { int a[10]={100,32,12,1000,43,56,43,89,0,1}; int b[10]={100,32,12,1000,43,56,43,89,0,1}; printf("递归遍历序列: "); Select(b,0,10); Print(b,10); printf("\n左右交换法的序列: "); Select1(a,10); Print(a,10); return 0; }
这篇关于选择排序算法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-05小米13T Pro系统合集:性能与摄影的极致融合,值得你升级的系统ROM
- 2024-10-01基于Python+Vue开发的医院门诊预约挂号系统
- 2024-10-01基于Python+Vue开发的旅游景区管理系统
- 2024-10-01RestfulAPI入门指南:打造简单易懂的API接口
- 2024-10-01初学者指南:了解和使用Server Action
- 2024-10-01Server Component入门指南:搭建与配置详解
- 2024-10-01React 中使用 useRequest 实现数据请求
- 2024-10-01使用 golang 将ETH账户的资产平均分散到其他账户
- 2024-10-01JWT用户校验课程:从入门到实践
- 2024-10-01Server Component课程入门指南