学习算法第一篇:排序算法
来源:互联网 发布:mac怎么打开exe文件 编辑:程序博客网 时间:2024/06/05 17:59
1.插入排序
适合对少量元素进行排序的有效算法,插入算法采用的方法和我们平时打牌是相似的,每抽一张牌,都会按花色大小插到合适的位置。每次从数据集里拿来一个数据,就将它放置到已排序队列的正确位置。
例如:
有一个待排序列{4,9,7,20,3,16,18},首先是第一个数4,{(4),9,7,20,3,16,18},接下来是9,然后序列是{(4,9),7,20,3,16,18},依此如此将数逐个进行比较排序。N个数据需要插入N-1次完成排序。
template<typename datatype>void insertsort(datatype D[],int length)
{
datatype key;
for(int j=2;j<length;j++)
{
key=D[j];
int i=j-1;
while(i>0&&key<D[i])
{
D[i+1]=D[i];
i=i-1;
}
}
D[i+1]=key;
}
}
2.冒泡排序
冒泡排序,是交换排序的一种,是根据在水中轻气泡不能在重气泡之下的原则设计的。主要思想是:扫描所有数据,两两比较,发现违反气泡重在下原则的则交换两者的位置,让重气泡下沉,轻气泡上浮。
template<typename datatype>void swap(datatype*a,datatype*b)
{
keytype temp;
temp=*a;
*a=*b;
*b=temp;
}
template<typename datatype>void bubblesort(datatype data[],int n)
{
int flag;
int i=1,j;
do{
for(j=0;j+1<n;j++)
{
if(data[j]>data[j+1])
{
swap(data[j],data[j+1]);
flag=1;
}
}
i++;
}while(i<n&&flag==1);
}
3.选择排序
选择排序其实可以和冒泡一起理解,扫描数据最多N-1次,每次都假设一个最小值或最大值,然后比较数据找到真的最大或最小的值。
template<typename datatype>void selectionsort(datatype data[],int n)
{
int i=1,j;
int max;
datatype temp;
while(i<=n-1)
{
max=n-i;
for(j=0;j<n-i+1;j++)
{
if(data[j]>data[max])
max=j;
}
if(max!=n-i)
{
temp=data[max];
data[max]=data[n-i];
data[n-i]=temp;
}
i++;
}
}
- 学习算法第一篇:排序算法
- 排序算法系列第一篇
- 算法 第一篇 冒泡排序
- 算法之排序-----排序第一篇 快速排序
- 【基础算法】(01) 十二种排序算法(第一篇)
- 算法第一篇:吐槽
- 搜索算法第一篇
- EM算法--第一篇
- PageRank算法第一篇
- Apriori算法第一篇
- 算法基础第一篇:排序汇总(1)
- 算法基础第一篇:排序汇总(2)
- 机器学习算法第一篇:决策树学习(一)
- 算法学习笔记 第1章 排序
- 算法第一篇之概念
- 算法总结(第一篇)
- 算法学习-排序算法
- 算法基础第一篇:选择算法
- uva152
- 杭电oj-1040-As Easy As A+B
- JAVA删除某一目录下的所有文件及文件夹(linnux环境)
- leetcode系列(43)strStr(KMP)
- 堆排序
- 学习算法第一篇:排序算法
- Minimum Path Sum
- myeclipse 下创建包提示The folder is already a source folder
- java poi 上传与下载word文件
- Android 通过WebService调用天气预报接口
- EA使用教程
- hdoj Be the Winner 2509 (NIM博弈)
- 如何在HTML中嵌入JavaScript
- linux开发常用命令整理