Sort 整理
文章、图片参考: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 整理的更多相关文章
- qsort函数、sort函数 (精心整理篇)
先说明一下qsort和sort,只能对连续内存的数据进行排序,像链表这样的结构是无法排序的. 首先说一下, qsort qsort(基本快速排序的方法,每次把数组分成两部分和中间的一个划分值,而对于有 ...
- forEach、map、filter、find、sort、some等易错点整理
一.常用方法解析 说起数组操作,我们肯定第一反应就是想到forEach().map().filter()等方法,下面分别阐述一下各方法的优劣. 1.forEach 1.1 基础点 forEac ...
- js数组学习整理
原文地址:js数组学习整理 常用的js数组操作方法及原理 1.声明数组的方式 var colors = new Array();//空的数组 var colors = new Array(3); // ...
- NOIP模板整理计划
先占个坑 [update]noip结束了,弃了 一.图论 1.单源最短路 洛谷P3371 (1)spfa 已加SLF优化 #include <iostream> #include < ...
- [Java面经]干货整理, Java面试题(覆盖Java基础,Java高级,JavaEE,数据库,设计模式等)
如若转载请注明出处: http://www.cnblogs.com/wang-meng/p/5898837.html 谢谢.上一篇发了一个找工作的面经, 找工作不宜, 希望这一篇的内容能够帮助到大 ...
- [python]数据整理,将取得的众多的沪深龙虎榜数据整一整
将昨日取得的众多的沪深龙虎榜数据整一整 提取文件夹内所有抓取下来的沪深龙虎榜数据,整理出沪深两市(含中小创)涨幅榜股票及前5大买入卖出资金净值,保存到csv文件 再手动使用数据透视表进行统计 原始数据 ...
- 《JavaScript高级程序设计》笔记整理
欢迎各位指导与讨论 : ) -------------------------待续------------------------------- 本文为笔者在学习时整理的笔记,如有错漏,恳请各位指出, ...
- JavaScript Array 常用函数整理
按字母顺序整理 索引 Array.prototype.concat() Array.prototype.filter() Array.prototype.indexOf() Array.prototy ...
- shell常用命令归类整理
shell 命令整理 bash shell 含有许多功能,因此有许多可用的命令:本文档仅罗列了一些常用命令及其使用频率较高的参数.#本文档仅罗列了一些常用命令及其使用频率较高的参数.#vers ...
随机推荐
- Ceph: validate that the RBD cache is active
Ceph: validate that the RBD cache is active Quick and simple test to validate if the RBD cache is en ...
- zabbix 用 LLD 完全自动化监控 Oracle
文章转载自:http://mp.weixin.qq.com/s?__biz=MzA3MzYwNjQ3NA==&mid=2651296856&idx=1&sn=2bdf78071 ...
- [转]Servlet 中文乱码问题及解决方案剖析
原文地址:http://blog.csdn.net/xiazdong/article/details/7217022/ 一.常识了解 1.GBK包含GB2312,即如果通过GB2312编码后可以通过G ...
- Web的结构组件
HTTP代理服务器的作用 Web安全,应用集成,性能优化 1. 代理 In computer networks, a proxy server is a server (a computer syst ...
- git 冲突解决
冲突文件的组成 "<<< HEAD"和 "====="之间的为主干内容 "=====" 和 ">>& ...
- 【BZOJ 1178】【APIO 2009】CONVENTION会议中心
http://www.lydsy.com/JudgeOnline/problem.php?id=1178 这道题想了好久没想明白,倍增数组通过看题解很快就明白了,但是一小段区间内应有的最多线段数一直不 ...
- SortedMap接口的实现类TreeMap介绍和实现Comparator自定义比较器(转)
与SortedSet接口类似,SortedMap也是一个结构,待排序的Map,其一个比较常用的实现类是TreeMap. TreeMap的put(K key, V value)方法在每添加一个元素时,都 ...
- JPA学习笔记1——JPA基础
1.JPA简介: Java持久化规范,是从EJB2.x以前的实体Bean(Entity bean)分离出来的,EJB3以后不再有实体bean,而是将实体bean放到JPA中实现.JPA是sun提出的一 ...
- OneThink学习笔记02----数据字典(即OneThink项目数据库里的表及其字段)
action 字段 类型 注释 id int(11) unsigned 自增主键 name char(30) 行为唯一标识 title char(80) 行为说明 remark char(140) 行 ...
- 【C++实现python字符串函数库】一:分割函数:split、rsplit
[C++实现python字符串函数库]split()与rsplit()方法 前言 本系列文章将介绍python提供的字符串函数,并尝试使用C++来实现这些函数.这些C++函数在这里做单独的分析,最后我 ...