排序算法基础
来源:互联网 发布:机器学习实战smo算法 编辑:程序博客网 时间:2024/06/02 05:12
介绍几种基础的排序方法:
一、选择排序:
以升序(从小到大)为例:选择排序的主要思想就是从所有的数中选取最小的放在第一个位置,再从剩下的数中选取第二小的放在第二个位置。降序与之同理。
附上关键代码:
//升序为例: for(int i=1; i<=n-1; i++) //进行n-1次排序,n是数据个数 for (int j=i+1; j<=n; j++) //将第i个数与其后所有数比较选取最小的赋到a[i]的位置; if(a[i]>a[j]) swap(a[i],a[j]);
二、冒泡排序:
以升序为例:冒泡排序的主要思想是从头开始,相邻的两个数依次进行比较大小,如果后面的比前面小就交换位置。降序与之同理。
附上关键代码:
//升序为例:for(int i=1;i<=n-1;i++) //冒泡法排序 for(int j=1;j<=n-i;j++) if (a[j]>a[j+1]) swap(a[j],a[j+1]); //比较与交换
三、快速排序:
快速排序是最常使用的一种排序方式。利用自带函数,方便快捷且比以上两种更快速,而且通过自设比较方式,可以做到多关键字排序等其他排序不具有的优势。系统默认的升序排列:sort(a,a+n);意思是从小到大将a[0]到a[n]进行排序,以此类推,sort(a+1,a+n)是指从a[1]到a[n]进行排序。降序排列则需要自定义比较方式:
附降序与多关键字排序的代码:
//降序bool comp(const int &a,const int &b)//自设比较函数 { return a>b; //降序排列 }int main(){ scanf("%d",&n); for (i=1; i<=n; i++) scanf("%d",&a[i]);//读入n个数据 sort(a+1,a+n+1,comp); //自设比较函数加comp来调用 }
//STL多关键字排序 struct student { int zf,sx,xh;//总分、数学、学号}a[10000]; bool comp(const student &a,const student &b) //自设比较函数 { if (a.zf!=b.zf) return a.zf>b.zf; //第一关键字,按总分从高到低排序 if (a.sx!=b.sx) return a.sx>b.sx; //第二关键字,在总分相同的情况下,按数学从高到低排序 return a.xh<b.xh; //第三关键字,在总分、数学都相同的情况下,按学号从低到高排序 }int main(){ scanf("%d",&n); for (i=1; i<=n; i++) scanf("%d%d%d",&a[i].zf,&a[i].sx,&a[i].xh);//读入数据 sort(a+1,a+n+1,comp); //排序,升序排列 }
除以上三种外,还有其他排序方式如归并排序等,以后将会在别的地方进行讲述。
0 0
- 基础排序算法-归并排序
- 基础排序算法-快速排序
- Lucene基础排序算法
- 基础排序算法演示
- 基础排序算法
- 基础排序算法
- 基础排序算法
- 基础排序算法总结
- 基础算法-插入排序
- 基础算法 排序
- 【算法基础】冒泡排序
- 【算法基础】归并排序
- 算法基础-冒泡排序
- 算法基础-希尔排序
- 算法基础-归并排序
- 【算法基础】希尔排序
- 基础排序算法总结
- 基础排序算法总结
- Java知识点整理——(2)编程基础
- 水仙花数
- Java中parseInt()和valueOf(),toString()的区别
- C语言 韩信点兵问题
- [原创]Hadoop-2.5.2-HA原文译
- 排序算法基础
- log4j.properties
- C语言概述
- Android快速生成通用Adapter
- C语言 分数化小数
- 如何打出Android程序调用stack trace
- 从上往下打印二叉树(二叉树)
- mac redis安装及简易使用
- Java知识点整理——(3)面向对象