数据结构之排序一
2016-05-26 20:14
274 查看
</pre><span style="font-size:18px;">今天花了一些时间重新温习了一下排序算法总的来说有以下几种:</span></h3><h3></h3><h3></h3><p><span class="wmd-input-section"><span class="token p"></span><span class="token lf"></span><span class="token p"><span style="font-size:18px;">(1)冒泡排序最简单粗暴的算法对数组进行从a[0]进行扫描,遇到比当前小的就换位置,扫描一遍后接着扫描第二遍,</span></span></span><span class="token lf"><span style="font-size:18px;">一直到扫描结束代码如下</span></span></p><span class="token lf"></span><pre class="cpp" name="code"><span style="font-size:14px;"> void bubble_sort(int a[],int n){ bool sorted = false;//整体排序标志 while(!sorted){ sorted = true;//假定已经排序 for(int i=0;i<n-1;i++){ if(a[i+1]<a[i]) swap(a[i],a[i+1]); sorted =false; } } //n--;这里代表最后末尾必然是最大的数因此,可以缩短待排序的长度 }</span>
冒泡排序比较重要的是设置监哨,来监控是否排序完毕。其时间复杂度o(n^2)
(2)选择排序与冒泡比较相似与冒泡不相同的是选择排序是在定位后,要找到一系列最小的才会选择交换
其时间复杂度与冒泡相同
void select_sort(int a[],int n){ for(i=0;i<n-1;i++){ int k = i; int key = a[i]; for(int j=i+1;j<len;j++){//双层循环遍历每个值找出最小 if(a[j]<key){ k = j; key = a[j];//最小值位置以及值 } } if(k!=i) swap(a[i],a[k])//若是不为现在起始最小值那么交换 } }
(3)插入(感觉好邪恶)排序法
insert 排序比较简单,每一个都进行较,扫描一遍就可以搞定直接上代码
void insert_sort(int a[],int length)
{
for(int j=1;j<length;j++)
{
int key=a[j];//记录下后面一个值
int i=j-1;
while(i>=0&&a[i]>key)//对前面进行扫描,把要排序的a[j]放置正确位置
{
a[i+1]=a[i];
i--;
}
a[i+1]=key;//对后面这个值赋予新的值
}
}
今天就写这些明天再更
相关文章推荐
- JavaScript演示排序算法
- C#数据结构之顺序表(SeqList)实例详解
- Lua教程(七):数据结构详解
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- C#数据结构之队列(Quene)实例详解
- C#数据结构揭秘一
- C#数据结构之单链表(LinkList)实例详解
- 数据结构之Treap详解
- 算法之排序算法的算法思想和使用场景总结
- PHP版本常用的排序算法汇总
- 用C语言举例讲解数据结构中的算法复杂度结与顺序表
- C#数据结构之堆栈(Stack)实例详解
- C#数据结构之双向链表(DbLinkList)实例详解
- JavaScript数据结构和算法之图和图算法
- JavaScript实现多种排序算法
- Java数据结构及算法实例:冒泡排序 Bubble Sort
- php 地区分类排序算法
- js三种排序算法分享
- Javascript中的常见排序算法
- Java数据结构及算法实例:插入排序 Insertion Sort