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 ...
随机推荐
- html5 css3中的一些笔记
<!DOCTYPE html> <html> <head> <meta charset="utf-8" > <title> ...
- 【BZOJ 4636】蒟蒻的数列
http://www.lydsy.com/JudgeOnline/problem.php?id=4636 DCrusher贡献的题目 看了他的博客,有两种做法,动态开点线段树和离线操作离散化区间线段树 ...
- java-二维码编写zxing
zxing 这个是google的 下载地址 http://code.google.com/p/zxing/downloads/list 二维码源码案例 package com.utils; impor ...
- Maven-pom.xml详解
(看的比较累,可以直接看最后面有针对整个pom.xml的注解) pom的作用 pom作为项目对象模型.通过xml表示maven项目,使用pom.xml来实现.主要描述了项目:包括配置文件:开发者需要遵 ...
- 绘图: Stroke, Brush
Stroke - 笔划 Brush - 画笔 示例1.演示“Stroke”相关知识点Drawing/Stroke.xaml <Page x:Class="Windows10.Drawi ...
- 解决jQuery UI 对话框兼容性问题
默认情况下使用jQuery UI的对话框,在Chrome浏览器是没问题的,但是在IE里却会显示对话框,用户体验非常不好.改变一下div的属性即可. 原本是这样: <div id="di ...
- c# 百度api语音识别
public static string getStrAccess(string para_API_key, string para_API_secret_key) { //方法参数说明: //par ...
- Hive 的分桶 & Parquet 概念
分区 & 分桶 都是把数据划分成块.分区是粗粒度的划分,桶是细粒度的划分,这样做为了可以让查询发生在小范围的数据上以提高效率. 分区之后,分区列都成了文件目录,从而查询时定位到文件目录,子数据 ...
- Hadoop 权威指南学习2 (Sqoop)
6. Sqoop Apache sqoop is an open source tool that allow users to extract data from structured data s ...
- IE/FF/Chrome下document.documentElement和document.body的 scrollHeight/scrollTop/clientHeight
IEdocument.documentElement.scrollHeight 浏览器所有内容高度 ,document.body.scrollHeight 浏览器所有内容高度document.do ...