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++各种排序的更多相关文章

  1. javascript中的Array对象 —— 数组的合并、转换、迭代、排序、堆栈

    Array 是javascript中经常用到的数据类型.javascript 的数组其他语言中数组的最大的区别是其每个数组项都可以保存任何类型的数据.本文主要讨论javascript中数组的声明.转换 ...

  2. iOS可视化动态绘制八种排序过程

    前面几篇博客都是关于排序的,在之前陆陆续续发布的博客中,我们先后介绍了冒泡排序.选择排序.插入排序.希尔排序.堆排序.归并排序以及快速排序.俗话说的好,做事儿要善始善终,本篇博客就算是对之前那几篇博客 ...

  3. JavaScript实现常用的排序算法

    ▓▓▓▓▓▓ 大致介绍 由于最近要考试复习,所以学习js的时间少了 -_-||,考试完还会继续的努力学习,这次用原生的JavaScript实现以前学习的常用的排序算法,有冒泡排序.快速排序.直接插入排 ...

  4. [C#][算法] 用菜鸟的思维学习算法 -- 马桶排序、冒泡排序和快速排序

    用菜鸟的思维学习算法 -- 马桶排序.冒泡排序和快速排序 [博主]反骨仔 [来源]http://www.cnblogs.com/liqingwen/p/4994261.html  目录 马桶排序(令人 ...

  5. 算法与数据结构(十三) 冒泡排序、插入排序、希尔排序、选择排序(Swift3.0版)

    本篇博客中的代码实现依然采用Swift3.0来实现.在前几篇博客连续的介绍了关于查找的相关内容, 大约包括线性数据结构的顺序查找.折半查找.插值查找.Fibonacci查找,还包括数结构的二叉排序树以 ...

  6. 算法与数据结构(七) AOV网的拓扑排序

    今天博客的内容依然与图有关,今天博客的主题是关于拓扑排序的.拓扑排序是基于AOV网的,关于AOV网的概念,我想引用下方这句话来介绍: AOV网:在现代化管理中,人们常用有向图来描述和分析一项工程的计划 ...

  7. 使用po模式读取豆瓣读书最受关注的书籍,取出标题、评分、评论、题材 按评分从小到大排序并输出到txt文件中

    #coding=utf-8from time import sleepimport unittestfrom selenium import webdriverfrom selenium.webdri ...

  8. javascript排序

    利用array中的sort()排序 w3cfunction sortNumber(a,b) { return a - b } var arr = new Array(6) arr[0] = " ...

  9. iOS自定义model排序

    在开发过程中,可能需要按照model的某种属性排序. 1.自定义model @interface Person : NSObject @property (nonatomic,copy) NSStri ...

  10. Lucene4.4.0 开发之排序

    排序是对于全文检索来言是一个必不可少的功能,在实际运用中,排序功能能在某些时候给我们带来很大的方便,比如在淘宝,京东等一些电商网站我们可能通过排序来快速找到价格最便宜的商品,或者通过排序来找到评论数最 ...

随机推荐

  1. Discuz!图片查看插件(支持鼠标缩放、实际大小、旋转、下载)

    Discuz!图片查看插件(支持鼠标缩放.实际大小.旋转.下载) 图片查看是网站中的常用功能,用于展示详细的图片.在discuz图片插件的基础上进行了改造,因此这篇文章主要从以下几个方面来讨论图片查看 ...

  2. 【转载】在 Visual Studio 2012 中创建 ASP.Net Web Service

    在 Visual Studio 2012 中创建 ASP.Net Web Service,步骤非常简单.如下: 第一步:创建一个“ASP.Net Empty Web Application”项目 创建 ...

  3. IOS添加控件

    YJQApp *appInfo =self.apps[i]; //.添加图片 UIImageView * iconView = [[UIImageView alloc]init]; CGFloat i ...

  4. Iframe跨域_ASP.NET

    1.描述: A系统 需要 调用 B系统的页面,被调用的B系统的页面b.html内部嵌套了iframe框架c.aspx地址页 2.问题呈现: ie浏览器下 Chrome浏览器下 追踪 3.问题原因: X ...

  5. UI布局

    1,初始化控件一般在onCreate()中完成,由于构造器中尚未完成控件加载,不能在其内初始化控件. 2,Activity子类必须含有无参构造.Intent.startActivity()方法调用的是 ...

  6. HTML5标准终于来了,看什么书学习最好??????

    最近看了一本书<HTML5网页开发实例详解>,是大众点评的攻城狮写的,觉得很有收获,看样子目前大多数的国内网页都支持HTML5了,全栈工程师是不是必须得会HTML5? 有兴趣的可以讨论呀, ...

  7. (转载)浅谈我对DDD领域驱动设计的理解

    原文地址:http://www.cnblogs.com/netfocus/p/5548025.html 从遇到问题开始 当人们要做一个软件系统时,一般总是因为遇到了什么问题,然后希望通过一个软件系统来 ...

  8. 杭电ACM2061--Treasure the new start, freshmen!

    http://acm.hdu.edu.cn/showproblem.php?pid=2061 这题很简单.注意换行. <span style="font-size:18px;" ...

  9. codevs 3185 队列练习1

    题目描述 Description 给定一个队列(初始为空),只有两种操作入队和出队,现给出这些操作请输出最终的队头元素. 操作解释:1表示入队,2表示出队 输入描述 Input Description ...

  10. Oracle 创建用户授权

    权限: create session create table unlimited tablespace connect resource dba 例: #sqlplus /nolog SQL> ...