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 ...
随机推荐
- C++中函数的默认参数和C语言中volatile的学习
1.函数默认参数 1 int func(int a,int b=10) 2 { 3 return a*b; 4 } 5 6 int main() 7 { 8 int c=func(2); 9 cout ...
- Mvc多级Views目录 asp.net mvc4 路由重写及 修改view 的寻找视图的规则
一般我们在mvc开发过程中,都会碰到这样的问题.页面总是写在Views文件夹下,而且还只能一个Controller的页面只能写在相应的以Controller名命名的文件夹下.如果我们写到别处呢?那么肯 ...
- ArcGIS 帮助(10.2、10.2.1 和 10.2.2)收集
帮助首页 [Oracle基础] 快速浏览:Oracle 地理数据库 什么是 Oracle Spatial? 设置到 Oracle 的连接 存储在 Oracle 地理数据库中的系统表 结合企业级地理数据 ...
- 轻快的VIM(三):删除
这一节我们来看看删除,删除命令比较简单,不过要使删除更有效率 你需要配合我们第一节中讲的各种移动命令 字符删除 x 删除光标所在处字符 X 删除光标所在前字符 这里没有什么可注意的地方,但需要说明一下 ...
- SPDY 是什么?如何部署 SPDY?
摘要:当老迈的 HTTP 协议逐渐不能满足人们需求的时候,Google 的 SPDY 协议出现在面前,那么这个长期以来一直被认为是 HTTP 2.0 唯一可行选择的 SPDY 是什么呢?当下我们如何能 ...
- htm.dropdownlist
@Html.DropDownList("status", new SelectList(new[] { "驳回", "确认", " ...
- SQL server 中的@,@@、#,##分别代表什么?
@声明变量,@@系统函数,#本地临时表,##全局临时 表
- BP神经网络推导过程详解
BP算法是一种最有效的多层神经网络学习方法,其主要特点是信号前向传递,而误差后向传播,通过不断调节网络权重值,使得网络的最终输出与期望输出尽可能接近,以达到训练的目的. 一.多层神经网络结构及其描述 ...
- NameNode & DataNode
NameNode类位于org.apache.hadoop.hdfs.server.namenode包下. NameNode serves as both directory namespace man ...
- 【codevs1043】 方格取数
http://codevs.cn/problem/1043/ (题目链接) 题意 N*N的方格,每个格子中有一个数,寻找从(1,1)走到(N,N)的两条路径,使得取到的数的和最大. Solution ...