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 ...
随机推荐
- android 监听短信并发送到服务器
1. 接受系统的短信广播,操作短信内容. 优点:操作方便,适合简单的短信应用. 缺点:来信会在状态栏显示通知信息. 2. 应用观察者模式,监听短信数据库,操作短信内容. 实例如下: SystemE ...
- Android快速开发框架LoonAndroid (转)
1.源码简介: 主要有以下模块: (1) 自动注入框架(只需要继承框架内的application既可) (2) 图片加载框架(多重缓存,自动回收,最大限度保证内存的安全性) (3) 网络请求模块(继承 ...
- iOS开发小技巧--巧用ImageView中的mode(解决图片被拉伸的情况)
一.自己遇到的问题:在布局ImageView的时候,通过约束将ImageView布局好,但是里面的图片被拉伸的很难看.这时候就用到了Mode属性,如图: 代码实现方式: 二.让图片按照比例拉伸,并不是 ...
- 网络流 HDU 3605
建图 源点 -> 1024类人 -> 星球 -> 汇点 权 每类人数目 星球容量 星球容量 列举 0~1 ...
- bzoj4402: Claris的剑
首先,对于本质相同的构造,我们只计算字典序最小的序列 假设序列中最大的元素为top 我们很容易发现这样的序列一定是1,2,..,1,2,3,2,3,...,2,3,4,3,4.........,top ...
- Win7下完全卸载Oracle 11g的步骤
1 右击“计算机”-->管理-->服务和应用程序-->服务,停掉所有Oracle相关的服务(以Oracle打头的,比如OracleDBConsoleorcl). 2 开始--> ...
- 【BZOJ-2436】嘉年华 DP + 优化
2436: [Noi2011]Noi嘉年华 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 529 Solved: 382[Submit][Statu ...
- 【BZOJ-1941】Hide and Seek KD-Tree
1941: [Sdoi2010]Hide and Seek Time Limit: 16 Sec Memory Limit: 162 MBSubmit: 830 Solved: 455[Submi ...
- 【BZOJ-3275&3158】Number&千钧一发 最小割
3275: Number Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 748 Solved: 316[Submit][Status][Discus ...
- 【codevs1227】 方格取数 2
http://codevs.cn/problem/1227/ (题目链接) 题意 N*N的方格,每个格子中有一个数,寻找从(1,1)走到(N,N)的K条路径,使得取到的数的和最大. Solution ...