文章、图片参考:http://www.jianshu.com/p/1b4068ccd505?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io

这里用C++实现了部分排序,待更新。。。

 名词解释:

n: 数据规模
k:“桶”的个数
In-place: 占用常数内存,不占用额外内存
Out-place: 占用额外内存
稳定性:排序后2个相等键值的顺序和排序之前它们的顺序相同

冒泡排序动图演示:

选择排序动图演示:

插入排序动图演示:

归并排序动图演示:

快速排序动图演示:

堆排序动图演示:

计数排序动图演示:

LSD基数排序动图演示:

  1 #include <bits/stdc++.h>
using namespace std;
void InsertSort(int na[],int n)
{
int tem,i,j;
for(i=; i<n; i++)
{
tem=na[i];
j=i-;
while(j>=&&tem<na[j])
{
na[j+]=na[j];
j--;
}
na[j+]=tem;
}
}
void ShellSort(int na[],int n)
{
int i,j,d,tem;
d=n/;
while(d>)
{
for(i=d; i<n; i++)
{
j=i-d;
while(j>=&&na[j]>na[j+d])
{
tem=na[j];
na[j]=na[j+d];
na[j+d]=tem;
j=j-d;
}
}
d=d/;
}
}
void BubbleSort(int na[],int n)
{
int i,j;
for(i=; i<n-; i++)
for(j=n-; j>i; j--)
if(na[j]<na[j-])
{
na[j] ^= na[j-];
na[j-] ^= na[j];
na[j] ^= na[j-];
}
}
void QuickSort(int na[],int s,int t)
{
int i=s,j=t,tem;
if(s<t)
{
tem=na[s];
while(i!=j)
{
while(j>i&&na[j]>tem)j--;
na[i]=na[j];
while(i<j&&na[i]<tem)i++;
na[j]=na[i];
}
na[i]=tem;
QuickSort(na,s,i-);
QuickSort(na,i+,t);
}
}
void SelectSOrt(int na[],int n)
{
int i,j,k;
for(i=; i<n-; i++)
{
k=i;
for(j=i+; j<n; j++)
if(na[j]<na[k])
k=j;
if(k!=i)
{
na[i] ^= na[k];
na[k] ^= na[i];
na[i] ^= na[k];
}
}
}
void Heap_Sift(int na[],int low,int high)
{
int i=low,j=*i;
int tem=na[i];
while(j<=high)
{
if(j<high&&na[j]<na[j+])j++;
if(tem<na[j])
{
na[i]=na[j];
i=j;
j=*i;
}
else break;
}
na[i]=tem;
}
void Heap_HeapSOrt(int na[],int n)
{
int i,j;
for(i=; i>=; i--)
na[i]=na[i-];
for(i=n/; i>=; i--)
Heap_Sift(na,i,n);
for(i=n; i>=; i--)
{
na[] ^= na[i];
na[i] ^= na[];
na[] ^= na[i];
Heap_Sift(na,,i-);
}
}
void Merge_Merge(int na[],int low,int mid,int high)
{
int *n1;
int i=low,j=mid+,k=;
n1=(int *)malloc((high-low+)*sizeof(int));
while(i<=mid&&j<=high)
if(na[i]<=na[j])
n1[k++]=na[i++];
else
n1[k++]=na[j++];
while(i<=mid)
n1[k++]=na[i++];
while(j<=high)
n1[k++]=na[j++];
for(k=,i=low; i<=high; k++,i++)
na[i]=n1[k];
}
void Merge_MergePass(int na[],int length,int n)
{
int i;
for(i=; i+*length-<n; i=i+*length)
Merge_Merge(na,i,i+length-,i+*length-);
if(i+length-<n)
Merge_Merge(na,i,i+length-,n-);
}
void Merge_MergeSort(int na[],int n)
{
int length,k,i=;
for(length=; length<n; length=*length)
Merge_MergePass(na,length,n);
}
void CountSort(int na[],int n)
{
int nmax=,i,j;
for(i=; i<n; i++)
nmax=max(nmax,na[i]);
int na1[nmax+]= {};
for(i=; i<n; i++)
na1[na[i]]++;
for(j=,i=; i<=nmax; i++)
while(na1[i]--)
na[j++]=i;
}
void Display(int na[],int n,string s)
{
cout<<s<<": ";
for(int i=; i<n; i++)
cout<<na[i]<<" ";
cout<<endl;
}
void Display(int na[],int n)
{
cout<<"HeapSort: ";
for(int i=; i<=n; i++)
cout<<na[i]<<" ";
cout<<endl;
}
#define n 10
int main()
{
int na[n]= {,,,-,,,,,,};
InsertSort(na,n);
Display(na,n,"InsertSort"); int na1[n]= {,,,,,,-,,,};
ShellSort(na1,n);
Display(na1,n,"ShellSort"); int na2[n]= {,,,,,,-,,,};
BubbleSort(na2,n);
Display(na2,n,"BubbleSort"); int na3[n]= {,,,,,,,-,,};
QuickSort(na3,,n-);
Display(na3,n,"QuickSort"); int na4[n]= {,,,,,,-,,,};
SelectSOrt(na4,n);
Display(na4,n,"SelectSort"); int na5[n]= {,,,,,,,,-,};
Heap_HeapSOrt(na5,n);
Display(na5,n); int na6[n]= {,,,,,-,-,,,};
Merge_MergeSort(na6,n);
Display(na6,n,"MergeSort"); int na7[n]= {,,,,,,,,,};
CountSort(na7,n);
Display(na7,n,"CountSort(don't sort minus)");
return ;
}

Sort 整理的更多相关文章

  1. qsort函数、sort函数 (精心整理篇)

    先说明一下qsort和sort,只能对连续内存的数据进行排序,像链表这样的结构是无法排序的. 首先说一下, qsort qsort(基本快速排序的方法,每次把数组分成两部分和中间的一个划分值,而对于有 ...

  2. forEach、map、filter、find、sort、some等易错点整理

    一.常用方法解析   说起数组操作,我们肯定第一反应就是想到forEach().map().filter()等方法,下面分别阐述一下各方法的优劣. 1.forEach 1.1 基础点   forEac ...

  3. js数组学习整理

    原文地址:js数组学习整理 常用的js数组操作方法及原理 1.声明数组的方式 var colors = new Array();//空的数组 var colors = new Array(3); // ...

  4. NOIP模板整理计划

    先占个坑 [update]noip结束了,弃了 一.图论 1.单源最短路 洛谷P3371 (1)spfa 已加SLF优化 #include <iostream> #include < ...

  5. [Java面经]干货整理, Java面试题(覆盖Java基础,Java高级,JavaEE,数据库,设计模式等)

    如若转载请注明出处: http://www.cnblogs.com/wang-meng/p/5898837.html   谢谢.上一篇发了一个找工作的面经, 找工作不宜, 希望这一篇的内容能够帮助到大 ...

  6. [python]数据整理,将取得的众多的沪深龙虎榜数据整一整

    将昨日取得的众多的沪深龙虎榜数据整一整 提取文件夹内所有抓取下来的沪深龙虎榜数据,整理出沪深两市(含中小创)涨幅榜股票及前5大买入卖出资金净值,保存到csv文件 再手动使用数据透视表进行统计 原始数据 ...

  7. 《JavaScript高级程序设计》笔记整理

    欢迎各位指导与讨论 : ) -------------------------待续------------------------------- 本文为笔者在学习时整理的笔记,如有错漏,恳请各位指出, ...

  8. JavaScript Array 常用函数整理

    按字母顺序整理 索引 Array.prototype.concat() Array.prototype.filter() Array.prototype.indexOf() Array.prototy ...

  9. shell常用命令归类整理

    shell 命令整理     bash shell 含有许多功能,因此有许多可用的命令:本文档仅罗列了一些常用命令及其使用频率较高的参数.#本文档仅罗列了一些常用命令及其使用频率较高的参数.#vers ...

随机推荐

  1. 一个Activity掌握Android4.0新控件 (转)

    原文地址:http://blog.csdn.net/lavor_zl/article/details/51261380 谷歌在推出Android4.0的同时推出了一些新控件,Android4.0中最常 ...

  2. 开发错误记录3:问题 Error:failed to find Build Tools revision 23.0.2

    今天导入swiperefreshlayoutdemo 问题 Error:failed to find Build Tools revision 23.0.2 修改build.gradle 里面设置,其 ...

  3. 用 Fabric 实现自动化部署

    自动化部署代码 http://liyangliang.me/posts/2015/06/deploy-applications-using-fabric/ http://fabric-docs-cn. ...

  4. 初探psutil

    系统性能信息模块psutil 1,psutil简介 psutil是一个跨平台能够轻松获取系统的进程和系统利用率,主要应用在系统监控,分析和限制系统资源以及进程管理.它实现了很多系统管理的命令,如ps, ...

  5. URL详解与URL编码

    作为前端,每日与 URL 打交道是必不可少的.但是也许每天只是单纯的用,对其只是一知半解,随着工作的展开,我发现在日常抓包调试,接口调用,浏览器兼容等许多方面,不深入去理解URL与URL编码则会踩到很 ...

  6. poj2774 后缀数组2个字符串的最长公共子串

    Long Long Message Time Limit: 4000MS   Memory Limit: 131072K Total Submissions: 26601   Accepted: 10 ...

  7. tarjan求桥、割顶

    若low[v]>dfn[u],则(u,v)为割边.但是实际处理时我们并不这样判断,因为有的图上可能有重边,这样不好处理.我们记录每条边的标号(一条无向边拆成的两条有向边标号相同),记录每个点的父 ...

  8. [poj2406] Power Strings

    Description 对于两个字符串a,b,定义a×b为将b接到a的末尾组成新的字符串.对于一个字符串a的幂运算的定义与我们在数学中的定义一样:a0=''(空字符),an+1=an×a. Input ...

  9. FIneCMS /dayrui/libraries/Chart/ofc_upload_image.php Arbitrary File Upload Vul

    catalog . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 Relevant Link: http://www.wooyun.org ...

  10. ELF Executable Reconstruction From A Core Image

    catalog . INTRODUCTION . THE PROCESS IMAGE . THE CORE IMAGE . EXECUTABLE RECONSTRUCTION . FAILURES I ...