编程:冒泡,选择,归并,快速
2011-11-03 20:47
323 查看
排序的方式太多了,先重点掌握几个,其余有机会慢慢学习!!
一:概念知识点介绍
1)时间复杂度
一般用最深层循环内的语句中的原操作的执行频度(重复执行的次数)来表示;
如:
for(int i=0;i!=m;i++)
{
for(j=0;j!=n;j++)
}
在这个双重循环中,第二个for循环是最深层循环,执行频度为m*n,因为时间复杂度为O(m*n);
常用时间复杂度比较:
O(1)<O(㏒n)<O(n)<O(n㏒n)<O(n2)<O(n3)
O(2n)<O(n!)<O(nn)
2)空间复杂度
指算法编写程序后,在计算机运行中所需存储空间大小的度量;
3)排序的稳定性
排序算法的稳定性,通俗地讲就是能保证排序前2个相等的数其在序列的前后位置顺序和排序后它们两个的前后位置顺序相同。
二:排序的简要比较
时间复杂度:O(n2)-O(n2)-O(nlogn)-O(nlogn)
冒泡排序/选择排序:具有稳定性,简单容易理解;效率低;
归并排序/不平衡二叉树排序:具有稳定性,比上快,比下慢;
堆排序/快速排序:不具有稳定性,速度快;
三:实现详解
1)冒泡
思想:
--比较相邻的元素,按需要进行交换;
--第一次大循环把最小的"沉"到最下面;
比较范围:0-n位;a[0]和a[1],a[1]和a[2]..a[n-1]和a
--第二次大循环把第二小的"沉"到倒数第二位置;
比较范围:0-(n-1)..
--依次类推..
--第i个位置:
比较范围:0-(n-i)
--直到-第n-1个位置(n表示数组元素的个数,a[n-1]表示数组的最后一个数)
void _sort_buble(int a[],int n)
{
cout<<"冒泡排序"<<endl;
int i,j,k;
for(i=0;i<n;i++)
{
for(j=0;j<n-i;j++)
{
if(a[j]<a[j+1]) //小则交换,表示最终排序结果是从大到小;
{
k=a[j];
a[j]=a[j+1];
a[j+1]=k;
}
}
}
}
2)选择
思想:
--依次以(第0,1,2..i..n-1)位为基准,分别和剩下的位比较,找出当前一个最大的或者最小的放该位置;
一个大循环后结果和冒泡类似,不同的是,冒泡是相邻元素的两两比较,选择是以一个为基准和剩余的比较;
void _sort_select(int a[],int n)
{
cout<<"选择排序"<<endl;
int i,j,k;
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if(a[i]>a[j])
{
k=a[i];
a[i]=a[j];
a[j]=k;
}
}
}
}
3)归并
4)快速
思想:快速排序是冒泡的改进,通过一趟排序吧数据分为独立的两个部分,一部分所有的数据都比另一部分要小;
然后用递归在对这两部分分别进行快速排序...在循环执行,直到数据变成有序序列;
void QuickSort(int a[], int l, int r, bool Up)
{
int i,j;
int Mid,k;
i=l;
j=r;
Mid=a[(l+r)/2];
if (Up)
{
do
{
while (a[i]<Mid) ++i;
while (Mid<a[j]) --j;
if (i<=j)
{
k=a[i];
a[i]=a[j];
a[j]=k;
++i;
--j;
}
} while (i<=j);
}
else
do
{
while (a[i]>Mid) ++i;
while (Mid>a[j]) --j;
if (i<=j)
{
k=a[i];
a[i]=a[j];
a[j]=k;
++i;
--j;
}
} while (i<=j);
if (i<r) QuickSort(a,i,r,Up);
if (l<j) QuickSort(a,l,j,Up);
}
(2011-10-25 15:16:08)
相关文章推荐
- 自主编程实现选择,冒泡,快速,归并,希尔排序
- 八大排序算法:插入(2:插入、希尔)、选择(2:选择、堆)、交换(2:冒泡、快速)、归并、基数
- 10种排序算法总结(冒泡、选择、插入、希尔、归并、快速、堆、拓扑、锦标赛、基数)
- 六种排序 冒泡 选择 插入 归并 快速 堆排序
- 排序算法大集合,插入、选择、冒泡、希尔、堆、归并、快速排序,总有一款适合你
- 数据结构(C#)--冒泡、插入、快速、堆、归并、希尔、选择各种排序排序过程比较以及各种排序的所用时间的对比
- 十种排序算法总结(冒泡、插入、选择、希尔、归并、堆、快速,计数,桶,基数)
- 十种排序算法总结(冒泡、插入、选择、希尔、归并、堆、快速,计数,桶,基数)
- 我的编程学习日志(8)--排序(冒泡,选择,快速以及sort函数)
- 第四篇、C_快速、冒泡、选择、插入排序、二分查找排序、归并、堆排序
- 6种排序算法:冒泡、鸡尾酒、选择、插入、归并、快速
- 可视化排序(插入/选择/冒泡/快速/归并/Shell)
- c# 自定义排序类(冒泡、选择、插入、希尔、快速、归并、堆排序等)
- 数组排序(插入、选择、希尔、堆、归并、快速、冒泡)
- 数据结构排序(简单易懂口语化)--冒泡,快速,直接插入,希尔,直接选择,堆,归并,基数
- 插入 | 希尔 | 冒泡 | 快速 | 选择 | 归并排序
- C 各种排序(选择/冒泡/快速/插入/希尔/归并/堆)
- 我的编程学习日志(8)--排序(冒泡,选择,快速以及sort函数)
- js排序算法总结——冒泡,快速,选择,插入,希尔,归并(转载)
- 七种排序算法总结(冒泡、插入、选择、希尔、归并、堆、快速)