C语言中的几种排序算法

在编程练习时,我们经常会遇到一些将一串乱序的数字排列成有序的数列(递增,递减)的问题,以此起到解决问题的效果。目前我使用的比较熟练的有三种排序算法,冒泡排序法,快速排序法,另外一个是C++中的sort算法。
  1. 冒泡排序法
    冒泡排序法是比较好理解,硬排的一种算法,缺点是当数列的元素过大时,排序的效率会比较低,时间复杂度会比较高。最好的情况时,复杂度为O(n),最差的为O(n*n),做题时经常会出现超时的现象。
    冒泡排序法使用两层for循环嵌套,第一层循环确定以那个元素开始比较,第二层循环在数组内比较大小。
    *代码如下
#include<stdio.h>
int a[100];//数组定义在main函数外,防止元素个数过多爆栈,且数组内元素自动清零
int main()
{int n,i,j,tmp;scanf("%d",&n);for(i=0;i<n;i++)scanf("%d",&a[i]);for(i=0;i<n;i++)for(j=i+1;j<n;j++)//第i个元素与本行所有元素比较{if(a[i]>a[j])//递增{tmp=a[i];a[i]=a[j];a[j]=tmp;//交换值,大的数顺序提前}}for(i=0;i<n;i++)printf("%d ",a[i]);return 0;
}

  1. 快速排序法(quicksort)
    快速排序法运用了分治策略和递归算法,主要先定义一个基准点(一般选在数组中间),在基准点的两端开始排序,左边遇到比基准点大的,右边遇到比基准点小的,交换数值。
    *代码如下
#include<stdio.h>
int a[100];
void quicksort(int a[],int left,int right)
{int i=left,j=right,mid=a[(i+j)/2],tmp;while(i<j){while(a[i]<mid)i++;//找到比基准点大的退出循环while(a[j]>mid)j--;//找到比基准点小的退出循环if(i<=j){tmp=a[i];a[i]=a[j];a[j]=tmp;i++;//左边继续往后遍历j--;//右边继续往前遍历}}//i>j指遍历错开基准点,此时分为左右两部分,继续递归执行quicksortif(left<j)quicksort(a,left,j);if(i<right)quicksort(a,i,right);
}
int main()
{int n;scanf("%d",&n);for(int i=0;i<n;i++)scanf("%d",&a[i]);quicksort(a,0,n-1);for(int i=0;i<n;i++)printf("%d ",a[i]);return 0;
}

  1. sort(C++)
    sort是C++中的一个函数,使用时要包含头文件#include,
    sort函数的模板有三个参数:

void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);
(1)第一个参数first:是要排序的数组的起始地址。

(2)第二个参数last:是结束的地址(最后一个数据的后一个数据的地址)sort(数组名,数组名+数组元素个数,排序方法)

(3)第三个参数comp是排序的方法:可以是从升序也可是降序。如果第三个参数不写,则默认的排序方法是从小到大排序。

元素自身包含了比较关系,如int,double等基础类型,可以直接进行比较greater() 递减, less() 递增(省略)

*代码如下

#include<iostream>
#include<algorithm>
using namespace std;
bool cmp1(int x,int y)
{return x>y;//x>y时,bool型返回true,x置于y前
}
bool cmp2(int x,int y)
{return x<y;//x>y时,bool型返回true,x置于y前
}
int a[105];
int main()
{int n;cin>>n;for(int i=0;i<n;i++)cin>>a[i];sort(a,a+n,greater<int>());//从大到小for(int i=0;i<n;i++)cout<<a[i]<<" ";cout<<endl;sort(a,a+n,cmp1);for(int i=0;i<n;i++)cout<<a[i]<<" ";cout<<endl;sort(a,a+n,less<int>());//从小到大for(int i=0;i<n;i++)cout<<a[i]<<" ";cout<<endl;sort(a,a+n,cmp2);for(int i=0;i<n;i++)cout<<a[i]<<" ";cout<<endl;return 0;
}

后续会继续补充

C语言中的几种排序算法相关推荐

  1. c语言选择排序步骤,C语言中如何实现选择排序算法

    选择排序法实现的步骤:首先找出一个最小数交换到最前面:然后在剩下的数中找个最小的交换到剩下数最前面:最后一直重复此步骤,直到所有数排好即可. 选择排序法实现的步骤:找出一个最小数交换到最前面,然后在剩 ...

  2. java中常用的几种排序算法--常见笔试面试

    转载:http://blog.csdn.net/ygc87/article/details/7208082 以下列出Java中常用的几种排序算法,只是简单实现了排序的功能,还有待改进,望指教(以下均假 ...

  3. 12种排序算法:原理、图解、动画视频演示、代码以及笔试面试题目中的应用

    0.前言 从这一部分开始直接切入我们计算机互联网笔试面试中的重头戏算法了,初始的想法是找一条主线,比如数据结构或者解题思路方法,将博主见过做过整理过的算法题逐个分析一遍(博主当年自己学算法就是用这种比 ...

  4. php常用的四种排序算法

    纯当练习,高手请绕过.以一维数组为例. 1.插入排序 思想: 每次将一个待排序的数据元素插入到前面已经排好序的数列中,使数列依然有序,知道待排序数据元素全部插入完为止. 示例: [初始关键字] [49 ...

  5. c 语言从大到小排序算法,10 大经典排序算法(动图演示+ C 语言代码)

    原标题:10 大经典排序算法(动图演示+ C 语言代码) 来源:C语言与CPP编程 以前也零零碎碎发过一些排序算法,但排版都不太好,又重新整理一次,排序算法是数据结构的重要部分,系统地学习很有必要. ...

  6. 我们一起来排序——使用Java语言优雅地实现常用排序算法

    破阵子·春景 燕子来时新社,梨花落后清明. 池上碧苔三四点,叶底黄鹂一两声.日长飞絮轻. 巧笑同桌伙伴,上学径里逢迎. 疑怪昨宵春梦好,元是今朝Offer拿.笑从双脸生. 排序算法--最基础的算法,互 ...

  7. php主要算法设计,四种排序算法设计(PHP)

    标签 详细分析 /** * 四种排序算法设计(PHP) * * 1) 插入排序(Insertion Sort)的基本思想是: 每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子文件中的适当 ...

  8. 位图排序 大数据_干货分享:大话12种排序算法

    干货分享:大话12种排序算法 常见的排序算法: 快速排序.堆排序.归并排序.选择排序 插入排序.二分插入排序 冒泡排序.鸡尾酒排序 桶排序.计数排序.基数排序.位图排序 技能点: 1.归并排序在O(N ...

  9. Java常见的几种排序算法-插入、选择、冒泡、快排、堆排等

    本文就是介绍一些常见的排序算法.排序是一个非常常见的应用场景,很多时候,我们需要根据自己需要排序的数据类型,来自定义排序算法,但是,在这里,我们只介绍这些基础排序算法,包括:插入排序.选择排序.冒泡排 ...

最新文章

  1. linux下软件的安装[转]
  2. mysql中一条SQLupdate语句是如何执行的?redo log 与binlog
  3. 往对象数组里面添加相同的key 不同的value
  4. java php 女生数量,萌妹子告诉你php和java如何选
  5. java二维数组遍历排序,实现二维数组的按次序排序!!!
  6. JSP:Java Server Page(1)
  7. 小米9开售秒罄!系统更新:新增月亮拍照及运动跟拍模式
  8. ZOJ 3817Chinese Knot(The 2014 ACM-ICPC Asia Mudanjiang Regional First Round)
  9. Android教程 第五章 常用UI界面控件
  10. Matlab fspecial函数
  11. TEM测试常见问题及解答(二)
  12. 2021 智慧养老整体解决方案
  13. java 支付宝退款、提现(单笔转账到支付宝账户接口)
  14. WT品牌语音芯片、功放芯片—让人机交互更简单,让电子世界更美好
  15. 多少秒算长镜头_电影中什么是长镜头画面(9个经典长镜头)
  16. 为什么安卓手机退出大型游戏时没有过渡动画?
  17. 计算机专业专科学校排名分数,计算机专业专科学校录取分数
  18. 以太坊(Ethereum) - 什么是智能合约
  19. Linux系统编程、网络编程-文件I/O
  20. 一套基于模板匹配的语音识别技术。提取语音的特征,并建立模板库,可以将语音识别技术应用于机器人...

热门文章

  1. excel函数从0到掌握(官方文档+自我解析)
  2. 8月~9月公有云故障事件
  3. SEO丨分析网站排名与流量有什么关系?
  4. cnpm安装vue-cli2
  5. 程序员的注意事项(网上拷贝)
  6. 声控开关电路原理图-门电路、限流电阻应用经典分析
  7. 2423Fence Repair
  8. 【Redis】Redis 高并发处理策略
  9. (郁闷p2pover中)整理记录四
  10. 说话人识别和说话人性别识别SDK-通过语音判断说话人,及说话人的性别