c++各种排序
1.插入排序
void InsertSort(int a[], int n)
{
int temp, i, j;
for (i = ; i < n; i++)
{
if (a[i] < a[i - ])
{
temp = a[i];
for (j = i - ; j >= && a[j]>temp; j--)
a[j + ] = a[j];
a[j + ] = temp;
}
}
}
时间复杂度:O(n2)
空间复杂度:O(1)
稳定性:稳定
2.希尔排序
void ShellSort(int a[], int n)
{
int dk,temp, i, j;
for (dk = n / ; dk >= ; dk /= )
{
for (i = dk; i <n; i+=dk)
{
if (a[i] < a[i - dk])
{
temp = a[i];
for (j = i - dk; j>=&&a[j]>temp; j -= dk)
a[j + dk] = a[j];
a[j + dk] = temp;
}
}
}
}
时间复杂度:O(n1.3)
最坏时间复杂度:O(n2)
空间复杂度:O(1)
稳定性:不稳定
3.冒泡排序
void BubbleSort(int a[], int n)
{
int temp,flag;
for (int i = ; i < n ; i++)
{
flag = ;
for (int j = ; j < n-i; j++)
{
if (a[j]>a[j + ])
{
temp = a[j];
a[j] = a[j + ];
a[j + ] = temp;
flag = ;
}
}
if (flag == ) break;
}
}
时间复杂度:O(n2)
空间复杂度:O(1)
稳定性:稳定
4.快速排序:O(nlog)---O(1)----稳定
int Parttion1(int a[], int low,int high)
{
int temp = a[low];
while (low < high)
{
while (low < high&&a[high] >= temp) high--;
a[low] = a[high];
while (low < high&&a[low] <= temp) low++;
a[high] = a[low];
}
a[low] = temp;
return low;
} void swap(int &a, int &b)
{
int temp;
temp = a;
a = b;
b = temp;
}
int Parttion2(int a[], int low, int high)
{//将小于等于a[high]的元素移到最前面,最后再将a[high]移到最终位置
int temp = a[high];
int i = low - ;
for (int j = low; j < high; j++)
{
if (a[j] <= temp)
{
i++;
swap(a[i], a[j]);
}
}
swap(a[i + ], a[high]);
return i + ;
}
void QuickSort(int a[], int low, int high)
{
if (low < high)
{
int p = Parttion2(a, low, high);
QuickSort(a, low, p - );
QuickSort(a, p + , high);
}
}
时间复杂度:O(n2)--基本有序或逆序的情况
空间复杂度:O(n)
稳定性:不稳定
平均时间复杂度最好:O(nlog2n)
5.简单选择排序
void SelectSort(int a[], int n)
{
int min;
for (int i = ; i < n-; i++)
{
min = i;
for (int j = i+; j < n; j++)
{
if (a[j] < a[min])
min = j;
}
if (min!=i)
swap(a[min], a[i]);
}
}
时间复杂度:O(n2)
空间复杂度:O(1)
稳定性:不稳定
6.堆排序
void AdjustDown(int a[], int k, int n)
{
a[] = a[k]; //a[0]是暂存单元
for (int i = * k; i <= n; i *= )
{
if (i < n&&a[i] < a[i + ]) i++;
if (a[]>=a[i]) break;
else
{
a[k] = a[i];
k = i;
}
}
a[k] = a[];
} void AdjustUp(int a[], int k)
{
a[] = a[k];
for (int i = k / ; i > ; i /= )
{
if (a[i] > a[]) break;
else
{
a[k] = a[i];
k = i;
}
}
a[k] = a[];
} void BuildMaxHeap(int a[], int n)
{
/*for (int i = n / 2; i > 0; i--)
AdjustDown(a, i, n);*/
for (int i = n; i > ; i--)
AdjustUp(a, i);
} void HeapSort(int a[], int n)
{
BuildMaxHeap(a, n);
for (int i = n; i > ; i--)
{
swap(a[], a[i]);
AdjustDown(a, , i - );
}
}
时间复杂度:O(nlog2n)
空间复杂度:O(1)
稳定性:不稳定
c++各种排序的更多相关文章
- javascript中的Array对象 —— 数组的合并、转换、迭代、排序、堆栈
Array 是javascript中经常用到的数据类型.javascript 的数组其他语言中数组的最大的区别是其每个数组项都可以保存任何类型的数据.本文主要讨论javascript中数组的声明.转换 ...
- iOS可视化动态绘制八种排序过程
前面几篇博客都是关于排序的,在之前陆陆续续发布的博客中,我们先后介绍了冒泡排序.选择排序.插入排序.希尔排序.堆排序.归并排序以及快速排序.俗话说的好,做事儿要善始善终,本篇博客就算是对之前那几篇博客 ...
- JavaScript实现常用的排序算法
▓▓▓▓▓▓ 大致介绍 由于最近要考试复习,所以学习js的时间少了 -_-||,考试完还会继续的努力学习,这次用原生的JavaScript实现以前学习的常用的排序算法,有冒泡排序.快速排序.直接插入排 ...
- [C#][算法] 用菜鸟的思维学习算法 -- 马桶排序、冒泡排序和快速排序
用菜鸟的思维学习算法 -- 马桶排序.冒泡排序和快速排序 [博主]反骨仔 [来源]http://www.cnblogs.com/liqingwen/p/4994261.html 目录 马桶排序(令人 ...
- 算法与数据结构(十三) 冒泡排序、插入排序、希尔排序、选择排序(Swift3.0版)
本篇博客中的代码实现依然采用Swift3.0来实现.在前几篇博客连续的介绍了关于查找的相关内容, 大约包括线性数据结构的顺序查找.折半查找.插值查找.Fibonacci查找,还包括数结构的二叉排序树以 ...
- 算法与数据结构(七) AOV网的拓扑排序
今天博客的内容依然与图有关,今天博客的主题是关于拓扑排序的.拓扑排序是基于AOV网的,关于AOV网的概念,我想引用下方这句话来介绍: AOV网:在现代化管理中,人们常用有向图来描述和分析一项工程的计划 ...
- 使用po模式读取豆瓣读书最受关注的书籍,取出标题、评分、评论、题材 按评分从小到大排序并输出到txt文件中
#coding=utf-8from time import sleepimport unittestfrom selenium import webdriverfrom selenium.webdri ...
- javascript排序
利用array中的sort()排序 w3cfunction sortNumber(a,b) { return a - b } var arr = new Array(6) arr[0] = " ...
- iOS自定义model排序
在开发过程中,可能需要按照model的某种属性排序. 1.自定义model @interface Person : NSObject @property (nonatomic,copy) NSStri ...
- Lucene4.4.0 开发之排序
排序是对于全文检索来言是一个必不可少的功能,在实际运用中,排序功能能在某些时候给我们带来很大的方便,比如在淘宝,京东等一些电商网站我们可能通过排序来快速找到价格最便宜的商品,或者通过排序来找到评论数最 ...
随机推荐
- 转: android app进程保活的文章列表
1. Android 后台任务型App多进程架构演化 http://www.jianshu.com/p/4ac1f373e8cd 2. 关于 Android 进程保活,你所需要知道的一切 http:/ ...
- Linux之cuda安装
1.下载https://developer.nvidia.com/cuda-downloads 2.双击下载好的deb进行安装 3.sudo apt-get install cuda 4.As par ...
- 宽度的100%和auto的区别
前段时间做项目,发现分不清width设为100%和auto的区别,实在是太水了,就查了点资料,做个总结,有不对的地方欢迎大家指出. width:auto 块级元素默认的宽度值.看一下MDN上的解释:T ...
- js概念理解
1.面向对象. 2.函数表达式. 3.递归. 4.闭包. 5.原型链. 6.作用域链. 7.上下文. 8.类. 9.活动对象. 10.w3c规范. 11.设计模式. 12.重构. 13.低耦合,高内聚 ...
- part 3 Controllers in AngularJS
What happens if the controller name is misspelled? When the controller name is misspelled, 2 things ...
- CSS之上边栏
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- .NET使用NPOI读取Word模板并替换关键字并下载
NPOI 是 POI 项目的 .NET 版本.POI是一个开源的Java读写Excel.WORD等微软OLE2组件文档的项目. 使用 NPOI 你就可以在没有安装 Office 或者相应环境的机器上对 ...
- Xcode6 模拟器不显示键盘
在学习加法计算器时,程序运行后发现点击模拟器上的输入框时有时候键盘可以弹出来,有时候又弹不出来. 网上查询结果只需要在模拟器的菜单中找到hardware -> keyboard -> 取消 ...
- CXF和Axis的比较【转】
在SOA领域,我们认为Web Service是SOA体系的构建单元(building block).对于服务开发人员来说,AXIS和CXF一定都不会陌生.这两个产品都是Apache孵化器下面的Web ...
- [Guava源码分析]Objects 和 ComparisonChain:帮助重写Object方法
我的技术博客经常被流氓网站恶意爬取转载.请移步原文:http://www.cnblogs.com/hamhog/p/3874194.html,享受整齐的排版.有效的链接.正确的代码缩进.更好的阅读体验 ...