您的位置:首页 > 理论基础 > 数据结构算法

数据结构之排序一

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;//对后面这个值赋予新的值
}
}

今天就写这些明天再更





内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息